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));
添加回答
举报