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

React使用useContext调用setState时报setState.nameList不是函数如何解决

错误原因
  • 你通过useState拿到的setState是顶层状态更新函数,本身是函数类型而非对象,不存在nameList属性方法,这是触发报错的直接原因。
  • 函数式组件的useState更新逻辑和类组件的this.setState不同,不会自动合并状态对象的属性,你需要手动处理完整的状态结构,避免其他属性被覆盖丢失。
修复代码

修改你的handleAddName逻辑如下即可正常运行:

const handleAddName = () => {
  setState(prevState => ({
    // 先展开原有所有状态,保留test等未修改的属性
    ...prevState,
    // 覆盖更新nameList数组,追加新输入的名字
    nameList: [...prevState.nameList, currName]
  }))
}
可选优化方案

如果后续全局状态的属性会持续增加、更新逻辑更复杂,建议改用useReducer替代useState管理全局状态,把不同的更新逻辑拆分成独立的reducer case,代码可维护性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 07:09:02