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

回答編集履歴

3

細かい修正

2020/02/29 08:20

投稿

hoshi-takanori
hoshi-takanori

スコア7903

answer CHANGED
@@ -32,18 +32,19 @@
32
32
  let data = this.state.data.map(item => {
33
33
  if (item.id === id) {
34
34
  return { ...item, text };
35
- } else {
35
+ } else {
36
- return item
36
+ return item
37
- }
37
+ }
38
38
  });
39
39
  this.setState({
40
40
  data: data
41
41
  });
42
42
  }
43
+
43
44
  callBackToggleTask(id, isDone){
44
45
  let data = this.state.data.map(item => item.id === id ? { ...item, isDone: !isDone } : item);
45
46
  this.setState({ data });
46
47
  }
47
48
  ```
48
49
 
49
- また、Task の中で id, text, isDone を state に保存してますが、これらは props の値をそのまま使うべきです。Task に必要なのは editMode だけのはず。
50
+ また、Task の中で id, text, isDone を state に保存してますが、これらは props の値をそのまま使うべきです。Task の state に必要なのは editMode だけのはず。

2

さらに追記

2020/02/29 08:20

投稿

hoshi-takanori
hoshi-takanori

スコア7903

answer CHANGED
@@ -28,14 +28,22 @@
28
28
  ```JavaScript
29
29
  // TodoApp より
30
30
 
31
- callBackChangeTask(text){
31
+ callBackChangeTask(id, text){
32
+ let data = this.state.data.map(item => {
32
- this.setState({
33
+ if (item.id === id) {
34
+ return { ...item, text };
35
+ } else {
33
- text: text
36
+ return item
37
+ }
34
38
  });
35
- }
36
- callBackToggleTask(isDone){
37
39
  this.setState({
38
- isDone: !isDone
40
+ data: data
39
41
  });
40
42
  }
43
+ callBackToggleTask(id, isDone){
44
+ let data = this.state.data.map(item => item.id === id ? { ...item, isDone: !isDone } : item);
45
+ this.setState({ data });
46
+ }
41
- ```
47
+ ```
48
+
49
+ また、Task の中で id, text, isDone を state に保存してますが、これらは props の値をそのまま使うべきです。Task に必要なのは editMode だけのはず。

1

追記

2020/02/29 07:55

投稿

hoshi-takanori
hoshi-takanori

スコア7903

answer CHANGED
@@ -1,3 +1,28 @@
1
+ TodoApp の callBackChangeTask や callBackToggleTask で this.setState していますが、これは TodoApp 全体の state を更新してしまっています。
2
+
3
+ ```
4
+ // TodoApp の state
5
+
6
+ {
7
+ "data": [
8
+ {
9
+ "id": "0.c0ihmbr6ocu",
10
+ "text": "sample todo1", // 本来は、これや
11
+ "isDone": false // これや
12
+ },
13
+ {
14
+ "id": "0.43mkltzx7ie",
15
+ "text": "sample todo2", // これや
16
+ "isDone": true // これを更新したいはず
17
+ }
18
+ ],
19
+ "searchText": "",
20
+
21
+ "text": "edited todo", // 実際には、これや
22
+ "isDone": true // これが追加されてる
23
+ }
24
+ ```
25
+
1
26
  text や isDone は各タスクの属性ですから、callBackChangeTask や callBackToggleTask の引数にタスクの id を追加して、指定されたタスクの text や isDone を変更する必要があります。
2
27
 
3
28
  ```JavaScript