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

React应用点击删除图标报错:Cannot read properties of undefined (reading '_id')

错误原因分析

你遇到的Cannot read properties of undefined (reading '_id')错误,是因为在deleteTodo函数中尝试访问data.result._id时,data.result为undefined。可能有两个原因:

  • 后端DELETE接口的返回结构和你预期的不一致,并没有返回result字段;
  • 请求过程中出现错误,导致data本身就是undefined。
修复方案

1. 确认后端返回结构,修正字段访问

先检查后端DELETE接口的返回值。如果后端返回的是被删除的todo对象本身(比如{_id: "xxx", ...}),那么直接使用data._id即可:

const deleteTodo = async id => {
    try {
        const res = await fetch(api_base + '/todo/delete/' + id, { method: "DELETE" });
        if (!res.ok) throw new Error('删除请求失败');
        const data = await res.json();
        
        setTodos(todos => todos.filter(todo => todo._id !== data._id));
    } catch (err) {
        console.error('删除操作出错:', err);
    }
}

2. 增加数据校验与错误处理

如果后端确实会返回result字段,先校验data.result是否存在,同时捕获请求可能出现的错误:

const deleteTodo = async id => {
    try {
        const data = await fetch(api_base + '/todo/delete/' + id, { method: "DELETE" }).then(res => res.json());
        
        // 校验返回数据格式
        if (!data?.result) {
            console.error('接口返回数据格式不符合预期');
            return;
        }
        
        setTodos(todos => todos.filter(todo => todo._id !== data.result._id));
    } catch (err) {
        console.error('删除请求失败:', err);
    }
}

额外建议

调用fetch时,记得判断响应状态码(res.ok),因为即使请求返回404、500这类错误状态,res.json()也不会自动抛出错误,需要手动处理这类情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 06:42:52