You need to enable JavaScript to run this app. React为API返回的对象数组新增属性时报undefined错误如何解决
优惠活动
大模型
产品
解决方案
定价
更多

React为API返回的对象数组新增属性时报undefined错误如何解决

问题分析
  • 核心报错原因是你尝试访问的newData[index]为undefined,再给它设置age属性就触发了该错误,具体诱因有两个:
    1. 你要操作的prevState.newData是数组类型,但你用Object.assign({}, prevState.newData)将其拷贝为了键为数组下标的普通对象,如果传入的index超出原数组的最大索引,对应键不存在就会返回undefined。
    2. 你没有在state初始化时给newData设置空数组作为默认值,首次执行方法时prevState.newData本身为undefined,拷贝后得到的空对象访问任意下标都是undefined。
  • 额外隐藏问题:你直接修改newData[index].age属于直接修改原state的对象引用,违反React state不可变更新原则,可能出现修改后视图不更新的异常。
解决方案

遵循React不可变更新规则,先拷贝数组、校验下标合法性、再拷贝对应项对象修改属性,正确代码如下:

addAge = (age, index) => {
  this.setState((prevState) => {
    // 拷贝原数组
    const newData = [...prevState.newData];
    // 校验下标合法性,避免访问undefined
    if (index < 0 || index >= newData.length) return { newData };
    // 拷贝目标对象并新增age属性,不修改原引用
    newData[index] = {
      ...newData[index],
      age
    };
    return { newData };
  });
};

同时注意在state初始化时给newData设置空数组初始值:

constructor(props) {
  super(props);
  this.state = {
    newData: []
  };
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 18:06:04