javascript - 使用 JavaScript React 中的扩展运算符将数组中的元素替换为一行

标签 javascript reactjs

我试图设置一个新的状态,但唯一改变的是这个数组中的一个元素。我对 javascript 还很陌生,所以我不太明白如何执行语法。

我知道我可以使用扩展运算符创建一个新对象,并且可以在对象中添加/更改某些内容(如果它位于顶层),但我该如何在数组中执行操作

newRow = {
 name: "kevin"
 status: false
}

currentStageData = {
 name: "Stage 1"
 items: [
   {
    name: "david"
    status: true
},   
{
    name: "kevin"
    status: true
},
{
    name: "bruce"
    status: true
},
 ]
}

我尝试这样做,但这种语法不起作用。

var newCurrentStageData = { ...currentStageData, newCurrentStageData.items[index]: newRow }

所以我最终不得不这样做。

var newRow = { ...row, status: e.target.checked }
var newCurrentStageData = { ...currentStageData }

newCurrentStageData.items[index] = newRow

最佳答案

展开在这里不起作用,因为您要插入项目的索引不一定位于末尾或开头。

您当前的方法还通过改变状态来违反 React 规则,这是绝对不应该做的。

如果索引已存在于数组中,.map 创建一个新索引,并在满足条件时替换同一索引处的项目。

const newCurrentStageData = { ...currentStageData, items: currentStageData.items.map((item, i) => i === index ? newRow : item) };

但我真的不会把所有内容都写在一行上。可读性比行压缩更重要。

const newCurrentStageData = {
  ...currentStageData,
  items: currentStageData.items.map(
    (item, i) => i === index ? newRow : item
  )
};

关于javascript - 使用 JavaScript React 中的扩展运算符将数组中的元素替换为一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70193509/

相关文章:

javascript - Google Chart Table 删除选择

javascript - 将js数组传递给php并解析它

javascript - PHP中如何存储多个流套接字资源?

reactjs - react this.props 未定义或空对象

javascript - 尝试使用 React Hooks 时出现 "TypeError: Object(...) is not a function"错误(alpha)

javascript - 单击页面的关闭按钮时,我想清除所有选择框值

javascript - Angular js - 根据字母 ASCII 值在表中排序

reactjs - 如何在加载内部图像之前暂停整个组件?

javascript - 尝试在react jsx中给常量一个this.state

reactjs - React的`this.props`里面的`getDefaultProps()`?