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

React Todo组件删除功能触发TypeError: Cannot read properties of undefined (reading 'filter')

报错原因

这个错误的本质是调用.filter()方法的todos变量值为undefined,不是预期的数组类型。
常见触发场景有两个:

  • 父组件中定义todos状态时没有给正确的初始值,比如写了const [todos, setTodos] = useState(),没有填入空数组作为默认值,初始渲染时todos就是undefined
  • 父组件渲染Todo子组件时,漏传了todos属性,导致子组件解构props拿到的todos是undefined
修复方案

排查父组件逻辑

  1. 确认todos状态初始化时填入了空数组作为初始值:
const [todos, setTodos] = useState([])
  1. 确认调用Todo组件时完整传入了所有需要的props:
<Todo 
  text={todo.text}
  todo={todo}
  todos={todos}
  setTodos={setTodos}
/>

增加兜底逻辑避免同类问题

可以直接在子组件props解构时给todos设置默认空数组,就算父组件漏传或者传错也不会报错:

const Todo = ({ text, todo, todos = [], setTodos }) => {
  // 原有逻辑不变
}

也可以在调用filter时加可选链兜底:

setTodos(todos?.filter((el) => el.id !== todo.id) || [])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 03:57:02