reactからsocketへ.ioを使用すると、メッセージ配列状態は常に初期化されます.


タイトルと同じreactからsocketへ.ioを使用して、
const [messages, setMessages] useState([])

useEffect(() => {
    socket.on('new message', data => {
      setMessages([...messages, data])
    }
},[])
このように処理すると、メッセージは常に初期化されます.
真剣に検索してみました...これで解決です.
https://stackoverflow.com/questions/63094510/why-is-my-state-array-resetting-to-empty
https://medium.com/@baphemot/understanding-reactjs-setstate-a4640451865b
setStateは、パラメータとして関数を受け入れます.
関数をsetStateの最初の引数として渡すと、reactは呼び出し時に現在のステータスで関数を呼び出し、ステータスオブジェクトとしてマージするために戻ります.したがって、上記の例を次のように更新します.
//this.state={値:0}と仮定します.
this.setState(((状態)=>({値:状態値+1});
this.setState(((状態)=>({値:状態値+1});
this.setState(((状態)=>({値:状態値+1});
this.state.value=3最初は予想してあげます.この構文は、ステータスを以前のステータスに基づいて計算された値に更新する場合に常に使用されることを覚えておいてください.
setMessages((previousMessages) => [messageObject, ...previousMessages]);
関数をパラメータとしてsetMessagesに渡すと、トラブルシューティング...解決できる理由は...今はまだ分かりません.分かったら修正する