teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

修正

2018/03/12 06:15

投稿

karamarimo
karamarimo

スコア2555

answer CHANGED
@@ -9,6 +9,8 @@
9
9
  00 で`setState`が実行されるとき、それはすぐに`this.state`に反映されません。
10
10
  なので01で`update(this.state.schedule, ...)`とするとき、この`schedule`ではまだ00が`false`なのです。
11
11
 
12
+ 結果、`key`=00 では 00 true 01 false が`setState`され、`key`=01 では 00 false 01 true が`setState`されるので、後者が上書きして 00 false 01 true となったわけです。
13
+
12
14
  解決策としては、①`setState`をまとめて1回実行するか、②`setState`には「古い`state`を受け取って新しい`state`を返す」関数を渡せますので、それを利用することです。
13
15
 
14
16
  ①`setState`をまとめて1回実行する