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

React useState更新对象属性报toString未定义错误如何修复

问题根因

报错来自两处代码写法错误:

  • setInnerState( innerState['feedType'] = text) 是完全错误的状态更新写法。首先你直接修改了原state对象,违反React状态不可变原则;其次赋值表达式innerState['feedType'] = text的返回值是等号右边的text字符串本身,相当于你执行了setInnerState(text),下一次渲染时innerState会直接变成你输入的字符串值,不再是带有feedType属性的对象。此时innerState.feedType读取结果为undefined,TextInput组件内部对value调用toString()方法时就会抛出「Cannot read property 'toString' of undefined」错误。
  • useCallback依赖数组为空,回调函数内部会永久捕获首次渲染时的innerState值,存在闭包陷阱,后续输入会出现状态更新不及时的问题。
修复代码

直接替换成下面的写法即可,用函数式更新的方式返回完整的新状态对象,既符合React状态更新规则,也不需要额外把state加到useCallback依赖里,从根源避免闭包问题:

const [innerState, setInnerState] = useState({
  feedType: 'bbong', 
})

const onChangeEtcfeedtype = useCallback((text) => {
  setInnerState(prevState => ({
    ...prevState,
    feedType: text
  }))
}, []);

<TextInput
  placeholder="input."
  value={innerState.feedType}
  onChangeText={onChangeEtcfeedtype}
/>
额外说明

如果项目用了TypeScript,不建议给useState写any类型,明确state的结构类型可以在写代码阶段就拦截掉这类错误传参的问题,不用等到运行时才抛错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 03:39:26