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

JavaScript React中如何通过展开运算符一行实现数组元素替换更新状态

解决方案

你可以同时对顶层对象和内部items数组使用展开运算符,配合数组slice方法仅替换目标下标位置的元素,一行实现不可变更新:

const newCurrentStageData = { 
  ...currentStageData, 
  items: [
    ...currentStageData.items.slice(0, index), 
    newRow, 
    ...currentStageData.items.slice(index + 1)
  ] 
}

原理解释

  1. 先展开原currentStageData复制所有顶层属性
  2. 单独重写items数组:
    • 用slice(0, index)取出目标下标之前的所有元素,展开后保留
    • 插入你需要替换的新元素newRow
    • 用slice(index + 1)取出目标下标之后的所有元素,展开后保留

全程没有修改原对象和原数组,符合状态更新的不可变要求。

其他说明

你目前在用的实现方式存在隐患:展开currentStageData的时候只复制了顶层对象,内部的items数组还是和原对象共享引用,你修改newCurrentStageData.items[index]的时候,原currentStageData.items也会被同步修改,推荐用上述写法避免该问题。

你之前语法报错的原因是:对象字面量的键只能是顶层属性名,不能直接用链式写法newCurrentStageData.items[index]定位嵌套属性做重写,所以语法不合法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:24:05