回答編集履歴

3

追記

2019/06/06 12:14

投稿

YukiYamashina
YukiYamashina

スコア1011

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

文字抜けの修正

2019/06/06 12:14

投稿

YukiYamashina
YukiYamashina

スコア1011

test CHANGED
@@ -44,4 +44,4 @@
44
44
 
45
45
  の直後に `this.state` はまだ更新されていません。ですので `this.setState` 直後に
46
46
 
47
- `console.log` を呼び出しても、直前の状態がログに表示されます。
47
+ `console.log` を呼び出しても、直前の状態がコンソールログに表示されます。

1

回答の追加

2019/06/06 10:48

投稿

YukiYamashina
YukiYamashina

スコア1011

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` を呼び出しても、直前の状態がログに表示されます。