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

React Native调用unshift报错todos.unshift is not a function是什么原因

报错原因
  • 该问题和useState无关,不是useState没有识别数组类型,错误来源于Array.unshift()的返回值特性和React状态更新规则的冲突
  • JavaScript原生的unshift()是会直接修改原数组的可变方法,执行后返回值是修改后数组的长度,属于数字类型,而非修改后的数组本身
  • 首次执行setTodos(todos.unshift(newTodo))时,数组类型的todos就被更新为数字类型,后续再次调用unshift时,数字类型变量没有对应的方法,就会触发该报错
修复方案

推荐使用符合React不可变更新规范的写法,直接构造新数组更新状态:

function addItem(newTodo) {
  console.log(newTodo);
  setTodos([newTodo, ...todos]);
}

如果需要使用unshift方法实现逻辑,要先拷贝原数组再操作,避免直接修改原状态:

function addItem(newTodo) {
  console.log(newTodo);
  const newTodos = [...todos];
  newTodos.unshift(newTodo);
  setTodos(newTodos);
}

额外提示:React状态更新要求遵循不可变原则,不要直接修改原状态的值,否则可能出现视图不更新、逻辑异常等问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:45:08