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

回答編集履歴

1

ソース修正

2021/09/16 03:16

投稿

退会済みユーザー
answer CHANGED
@@ -3,4 +3,24 @@
3
3
  - setTodos(newTodos);
4
4
  + setTodos(newTodos.map((e, i) => ({ ...e, id: i + 1 })));
5
5
  ```
6
- そやけど、これ `id`やなくて、ただの行番号って感じやな。ま、好きにせえ。
6
+ そやけど、これ `id`やなくて、ただの行番号って感じやな。ま、好きにせえ。
7
+
8
+ **追記:**
9
+
10
+ 上のは、修正を一行で済ませて、質問にあるコードをなるべく生かす案やけど、ワテなら`onClickDelete` をこないに書くと思いますわ。
11
+
12
+ ```diff
13
+ const onClickDelete = (index) => {
14
+ - const newTodos = [...todos];
15
+ - newTodos.splice(index, 1);
16
+ - setTodos(newTodos);
17
+ + setTodos(
18
+ + todos.filter((_, i) => i !== index).map((e, i) => ({ ...e, id: i + 1 }))
19
+ + );
20
+ };
21
+
22
+ ```
23
+
24
+ あ、あと、関数名も `onClickDelete` やなく、 `handleDelete` にするかも。なぜゆうたら
25
+ - イベントリスナーの変数名に`handle`をプレフィックスにするのは、しばしば見られる慣習
26
+ - 要素の削除は、(今のところはクリックだけがトリガーでも、)クリックだけによって生じるものではないから