回答編集履歴

3

ついき

2018/03/09 04:33

投稿

HayatoKamono
HayatoKamono

スコア2415

test CHANGED
@@ -113,3 +113,11 @@
113
113
 
114
114
 
115
115
  [https://codesandbox.io/s/4826klkk4](https://codesandbox.io/s/4826klkk4)
116
+
117
+
118
+
119
+ # 簡単にポイント
120
+
121
+ 1. this.setStateメソッドは非同期実行される為、this.setStateメソッドの中でthis.stateを参照したいような場合は、上記掲載コードのようにthis.setStateメソッドが取る第一引数に渡ってくるpreviousStateを参照して、そちらを利用する
122
+
123
+ 2. 今回のようにネストが深く、更新対象が配列の中にあるアイテムやオブジェクトである場合は、そのコピーを作ってから、更新をする。reactでstateを直接書き換えてしまうのはNGであるため。

2

しゅうせい

2018/03/09 04:33

投稿

HayatoKamono
HayatoKamono

スコア2415

test CHANGED
@@ -48,13 +48,13 @@
48
48
 
49
49
 
50
50
 
51
- // const updatedCount = Object.assign({}, this.state.counts[0], test: 100});
52
-
53
- const updatedCount = { ...this.state.counts[0], test: 100 };
51
+ this.setState((prevState) => {
54
52
 
55
53
 
56
54
 
55
+ // const updatedCount = Object.assign({}, prevState.counts[0], test: 100});
56
+
57
- this.setState((prevState) => {
57
+ const updatedCount = { ...prevState.counts[0], test: 100 };
58
58
 
59
59
 
60
60
 
@@ -104,6 +104,8 @@
104
104
 
105
105
 
106
106
 
107
+
108
+
107
109
  ```
108
110
 
109
111
 

1

5

2018/03/09 04:23

投稿

HayatoKamono
HayatoKamono

スコア2415

test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- 以下、質問内容通り、配列の0番目のアイテムを更新するという決め打ちコードではありますが、
5
+ 以下、質問内容通り、配列の最初のアイテムを更新するという決め打ちコードではありますが、
6
6
 
7
7
  実際は、指定された配列のindexに対するアイテムを更新するみたいに汎用性を高めたコードにする必要があるかと思います。また、配列内のオブジェクトの中にさらに配列やオブジェクトがあった場合、ちゃんと更新対象のアイテムをディープコピーしてあげる必要が出てくるので、さらに面倒臭くなります。その場合は、ディープコピーを簡単にしてくれるライブラリを使ってあげると良いと思います。
8
8