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

React如何更新数组中多层嵌套对象内的an1、an2等字段的值?

问题根因

你的现有更新逻辑本身是正确的,问题出在handleChange函数没有接收*要修改的数组项下标index*作为参数,导致if (i === index)的匹配判断无法定位到目标项,自然没法完成字段更新。

调整方案

1. 调用handleChange时传入对应下标

你在循环渲染输入框的位置,需要把当前项的下标和要修改的animals字段名一起传入事件处理函数,示例渲染逻辑如下:

{data.map((item, index) => (
  <div key={index}>
    <p>所在地:{item.location}</p>
    <input 
      value={item.animals.an1}
      onChange={(e) => handleChange(e, 'an1', index)}
      placeholder="动物1"
    />
    <input 
      value={item.animals.an2}
      onChange={(e) => handleChange(e, 'an2', index)}
      placeholder="动物2"
    />
  </div>
))}

2. 调整handleChange接收下标参数

const handleChange = (e, input, index) => {
  const updatedList = data.map((item, i) => {
    if (i === index) {
      // 逐层浅拷贝保证状态不可变,修改对应字段
      return {
        ...item,
        animals: {
          ...item.animals,
          [input]: e.target.value
        }
      };
    }
    return item;
  });
  setData(updatedList);
}

补充说明

如果你的index已经存在于当前组件的状态、或者闭包可访问的变量中,也可以不用额外传参,只要保证匹配判断时的index能正确指向要修改的数组项即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 13:45:03