回答編集履歴

2

stateの値を直接変化させるコードを修正

2022/03/22 17:06

投稿

miyaharu
miyaharu

スコア77

test CHANGED
@@ -29,6 +29,6 @@
29
29
 
30
30
  //新規データ受信用のsocketイベント
31
31
  socket.on("test_emit_10s", (data) => {
32
- setContextData(prev => { prev.shift(); return [...prev, data]; });
32
+ setContextData(prev => [...prev.slice(1), data]);
33
33
  });
34
34
  ```

1

最後の部分が嫌な感じだったので削除

2022/03/22 16:58

投稿

miyaharu
miyaharu

スコア77

test CHANGED
@@ -19,7 +19,7 @@
19
19
  また、useEffect関数の第二引数でcontextDataを指定していないので、useEffect内のcontextDataは初回実行時のものが利用され続けます。したがって実際にはcontextDataが更新されていたとしてもconsole画面には空の配列が表示されます。
20
20
 
21
21
  余談ですが、連想配列とオブジェクトの配列は別物です。今回のはオブジェクトの配列ですよね。
22
- あと、socketDataはなんのために用意されているのでしょうか。私なら下記のようにcontextDataにそのままデータを突っ込んでしまいます。socketDataのような入れ物を用いることの利点があったら教えてください。
22
+ あと、socketDataはなんのために用意されているのでしょうか。私なら下記のようにcontextDataにそのままデータを突っ込んでしまいます。
23
23
 
24
24
  ```ts
25
25
  //初期データ受信用のsocketイベント