Reactで、Todoリストを作成しています。
Todoリストの削除ボタンを押したら、タスク削除後、タスクのIDの番号が振り直される機能を実装したいです。
色々調べて実装したのですが、これ以上積んでわからない状態です。
何方かアドバイスをお願いします。
#####現在の状況
Todoリストの削除ボタンを押したら、タスク削除後、タスクのID番号は振り直されることなく、追加した時の番号が表示される。
App.js
1import { useState } from "react"; 2 3//入力用 todos 4//未完了のTodo用 comment 5 6function App() { 7 const [todos, setTodos] = useState([]); 8 const [comment, setComment] = useState(""); 9 10 const onChangeTodo = (e) => { 11 setComment(e.target.value); 12 }; 13 14 const addTodo = () => { 15 if (comment === "") return; 16 17 const todo = { 18 id: todos.length + 1, 19 comment, 20 status: "incomplete", 21 }; 22 setTodos([...todos, todo]); 23 setComment(""); 24 }; 25 const onClickDelete = (index) => { 26 const newTodos = [...todos]; 27 newTodos.splice(index, 1); 28 setTodos(newTodos); 29 }; 30 31 return ( 32 <div className="App-header"> 33 <h1>TODOリスト</h1> 34 35 <form> 36 <label> 37 <input type="radio" id="all-Todo" name="Todo" defaultChecked /> 38 全て 39 </label> 40 <label> 41 <input type="radio" id="incomplete-Todo" name="Todo" /> 42 作業中 43 </label> 44 <label> 45 <input type="radio" id="complete-Todo" name="Todo" /> 46 完了 47 </label> 48 </form> 49 50 <table> 51 <thead> 52 <tr> 53 <th>ID</th> 54 <th>コメント</th> 55 <th>状態</th> 56 </tr> 57 </thead> 58 <tbody> 59 {todos.map((todo, index) => { 60 return ( 61 <tr key={todo.id}> 62 <td>{todo.id}</td> 63 <td>{todo.comment}</td> 64 <td> 65 <button>作業中</button> 66 <button onClick={() => onClickDelete(index)}>削除</button> 67 </td> 68 </tr> 69 ); 70 })} 71 </tbody> 72 </table> 73 74 <div> 75 <h2>新規タスクの追加</h2> 76 <input placeholder="Enter a new TODO" value={comment} onChange={onChangeTodo} /> 77 <button onClick={addTodo}>追加</button> 78 </div> 79 </div> 80 ); 81} 82 83export default App;
index.js
1import React from "react"; 2import ReactDOM from "react-dom"; 3import App from "./App"; 4 5ReactDOM.render(<App />, document.querySelector("#root"));
> タスクのIDの番号が振り直される機能を実装したいです。
なぜ振り直さなければならないのでしょうか?
maisumakunさん、どのようなコードを書いたら、
追加したタスクの番号が振り直されるような実装ができるのか知りたいからです。
現在、Reactをアウトプット中心に勉強をしていて、アプリをカスタマイズをして
レベルアップを図っています。
qiitaやdevで検索してTodoリストコードサンプルはたくさんあれど、
追加したTaskの番号を振り直される仕組みのTodoリストは見つからなかったので、
ここで質問しました。
Todo の質問が非表示になってるのでここに書きますが、まず toggle を書き換えて、
const toggle = (id) => {
setTodos(todos.map(e => e.id === id ? { ...e, status: e.status === "incomplete" ? "complete" : "incomplete" } : e));
};
ボタンを次のようにすれば良いかと。
<button onClick={() => toggle(todo.id)}>{todo.status === "incomplete" ? "作業中" : "完了"}</button>
(todo.status を文字列ではなく true/false にするともっと単純になりますが…。)
回答2件
あなたの回答
tips
プレビュー