回答編集履歴
3
追記
test
CHANGED
@@ -45,3 +45,31 @@
|
|
45
45
|
の直後に `this.state` はまだ更新されていません。ですので `this.setState` 直後に
|
46
46
|
|
47
47
|
`console.log` を呼び出しても、直前の状態がコンソールログに表示されます。
|
48
|
+
|
49
|
+
|
50
|
+
|
51
|
+
|
52
|
+
|
53
|
+
> 何度も申し訳ありません。もう1つだけ、if (this.state.likes.includes(person)) {のところに書いた return; なのですが、こちらはどうして必要なのでしょうか? 実はこれは別の人にアドバイスをされて書いたのです。このreturnを削除すると、挙動がおかしくなってしまいます。ですが、何のための記述なのか理解できずにいました。
|
54
|
+
|
55
|
+
|
56
|
+
|
57
|
+
[return 文は関数の実行を終了](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/return) する役割があります。そのため `return` 文を消してしまうと、`person` が `this.state.likes` に含まれている場合に、`if` 文の中が実行された後に
|
58
|
+
|
59
|
+
|
60
|
+
|
61
|
+
```
|
62
|
+
|
63
|
+
this.setState({
|
64
|
+
|
65
|
+
likes: [...this.state.likes, person]
|
66
|
+
|
67
|
+
});
|
68
|
+
|
69
|
+
console.log("this.state.likes", this.state.likes);
|
70
|
+
|
71
|
+
```
|
72
|
+
|
73
|
+
|
74
|
+
|
75
|
+
までもが実行されてしまいます。
|
2
文字抜けの修正
test
CHANGED
@@ -44,4 +44,4 @@
|
|
44
44
|
|
45
45
|
の直後に `this.state` はまだ更新されていません。ですので `this.setState` 直後に
|
46
46
|
|
47
|
-
`console.log` を呼び出しても、直前の状態がログに表示されます。
|
47
|
+
`console.log` を呼び出しても、直前の状態がコンソールログに表示されます。
|
1
回答の追加
test
CHANGED
@@ -21,3 +21,27 @@
|
|
21
21
|
}
|
22
22
|
|
23
23
|
```
|
24
|
+
|
25
|
+
|
26
|
+
|
27
|
+
> console.log("this.state.likes", this.state.likes); でstateのlikes arrayを見てみると、1個前にクリックしたelementが表示されます。どうしてこのようなことが起こるのでしょうか?
|
28
|
+
|
29
|
+
|
30
|
+
|
31
|
+
`setState` は[コンポーネントのローカル state の更新をスケジュールするため](https://ja.reactjs.org/docs/state-and-lifecycle.html)に使用するものです。
|
32
|
+
|
33
|
+
言い換えると、
|
34
|
+
|
35
|
+
```
|
36
|
+
|
37
|
+
this.setState({
|
38
|
+
|
39
|
+
likes: [...this.state.likes, person]
|
40
|
+
|
41
|
+
});
|
42
|
+
|
43
|
+
```
|
44
|
+
|
45
|
+
の直後に `this.state` はまだ更新されていません。ですので `this.setState` 直後に
|
46
|
+
|
47
|
+
`console.log` を呼び出しても、直前の状態がログに表示されます。
|