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

React使用useState更新嵌套对象内数组指定索引的属性值

问题根因

你之前的代码中用对象字面量{}包裹requirements的更新逻辑,导致原本的数组类型被转换为以索引为键的普通对象。

修复方案

你需要用数组字面量[]构造新的requirements数组,以下提供两种可直接使用的写法:

写法1:数组切片(性能更优,适合大数组场景)

setItemUpdated((prev) => ({
  ...prev,
  requirements: [
    ...prev.requirements.slice(0, idx),
    { ...prev.requirements[idx], customValue: val },
    ...prev.requirements.slice(idx + 1)
  ]
}))

逻辑说明:截取目标索引idx之前的所有元素、插入更新后的目标元素、拼接idx之后的所有元素,最终生成完整的新数组。

写法2:map遍历(语法更简洁,适合小数组场景)

setItemUpdated((prev) => ({
  ...prev,
  requirements: prev.requirements.map((item, index) => 
    index === idx ? { ...item, customValue: val } : item
  )
}))

逻辑说明:遍历原数组,匹配到目标索引时返回更新后的对象,其余元素直接返回原引用,在保证不可变更新的前提下简化代码。

注意事项

两种写法都遵循了React状态更新的不可变原则,嵌套层级的每一层修改都会生成新的引用,确保React可以正常检测到状态变更触发重渲染。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 18:06:06