3 回答

TA貢獻1799條經驗 獲得超8個贊
是的,Array.splice
返回刪除的元素并改變原始數組,這意味著您可以用來index
從列表中刪除/更新待辦事項todos
。
執行此操作的最簡單方法是以下方法。這是工作示例
const todoList = () => {
const [todos, setToDo] = useState(initialToDo);
const [input, setInput] = useState('');
const handleDelete = index => {
todos.splice(index, 1)
setToDo([...todos])
}
return (
todos.map((todo, index) => {
return (
<div className='todo-list flex p-2 w-1/2 justify-between'>
<p className="px-3">{todo.name}</p>
<button
className='rounded-sm border-2 px-2'
onClick={() => handleDelete(index)}
>
-
</button>
</div>
)}))
}

TA貢獻1856條經驗 獲得超17個贊
使用filter而不是使用 進行變異splice。試試這個片段。
const TodoList = () => {
const [todos, setTodos] = React.useState([
{ name: 'a', id: 1 },
{ name: 'b', id: 2 },
]);
return todos.map((todo) => {
return (
<div>
<p>{todo.name}</p>
<button onClick={() => setTodos(todos.filter(item => item.id !== todo.id))} > - </button>
</div>
);
});
};
const domContainer = document.querySelector('#app');
ReactDOM.render(<TodoList />, domContainer);
<script crossorigin src="https://unpkg.com/react@17/umd/react.production.min.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@17/umd/react-dom.production.min.js"></script>
<div id="app"> </div>

TA貢獻1757條經驗 獲得超8個贊
splice
返回已刪除的項目。我建議使用filter
類似的東西:
setToDo(todos.filter(({ id }) => id != todo.id));
添加回答
舉報