You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Todo列表点击删除按钮未删除对应索引数据问题求助

问题根源

  • 调用deleteTodo时传入的是待办项的业务ID(key.id),但deleteTodo内部将传入值当做数组下标执行splice删除,业务ID和数组下标完全不匹配,自然会删除错误位置的数据。
  • map遍历的参数命名存在误导:Array.map的第一个参数是当前遍历的元素对象,第二个参数才是数组下标,代码中写为(key, value)很容易混淆参数含义。
  • 额外小问题:setTodos是React的异步状态更新方法,调用后立刻打印todos.length拿到的是更新前的旧值,不是最新的列表长度。

修复方案

推荐使用按业务ID过滤删除的方案,比依赖数组下标更稳定,就算后续列表做过排序、筛选也不会出现删错的问题:

修改后的完整代码

import { useEffect, useState } from "react";

const Task = () => {
    const [todos, setTodos] = useState([]);

    useEffect(() => {
        fetch('http://jsonplaceholder.typicode.com/todos')
            .then(res => res.json())
            .then(data => {
                setTodos(data)
            })
    }, []);

    const deleteTodo = (targetId) => {
        // 过滤掉id匹配的待办项,直接生成新数组
        const newTodos = todos.filter(todo => todo.id !== targetId);
        setTodos(newTodos);
        console.log(targetId);
        console.log(`newLength : ${newTodos.length}`);
    }

    return (
        <div className='container'>
            <table className='table'>
                <tbody>
                    {/* 修正map参数命名,直接用当前遍历的todo对象取值,代码更简洁 */}
                    {todos.map((todo) => (
                        <tr key={todo.id}>
                            <td>{todo.id}</td>
                            <td>{todo.title}</td>
                            <td>{`${todo.completed}`}</td>
                            <td>
                                <button className='btn btn-danger ' onClick={() => deleteTodo(todo.id)}> Delete </button>
                            </td>
                        </tr>
                    ))}
                </tbody>
            </table>
            <button className='btn btn-primary'>Add Task</button>
        </div>
    );
}
export default Task;

如果你一定要用下标删除的方案,只要把删除按钮的点击事件传参改为数组下标即可:

{todos.map((todo, index) => (
    // 其他代码不变
    <button className='btn btn-danger ' onClick={() => deleteTodo(index)}> Delete </button>
))}

内容的提问来源于stack exchange,提问作者coolhack7

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 09:54:08