如何正确更改对象数组的属性?Javascript反应JS

如何正确更改对象数组的属性?Javascript反应JS,javascript,reactjs,Javascript,Reactjs,我有一组对象: this.state={ itemSquare:[{ 物品:“炸弹”, 状态:false }, { 物品:“炸弹”, 状态:false }, { 物品:“炸弹”, 状态:false }, { 物品:“炸弹”, 状态:false }, { 项目:“字段”, 状态:false }, { 项目:“字段”, 状态:false }, { 项目:“字段”, 状态:false }, { 项目:“字段”, 状态:false }, { 项目:“字段”, 状态:false }, { 物品:“炸弹”

我有一组对象:

this.state={
itemSquare:[{
物品:“炸弹”,
状态:false
}, {
物品:“炸弹”,
状态:false
}, {
物品:“炸弹”,
状态:false
},
{
物品:“炸弹”,
状态:false
},
{
项目:“字段”,
状态:false
},
{
项目:“字段”,
状态:false
},
{
项目:“字段”,
状态:false
},
{
项目:“字段”,
状态:false
},
{
项目:“字段”,
状态:false
},
{
物品:“炸弹”,
状态:false
}, {
物品:“炸弹”,
状态:false
}, {
物品:“炸弹”,
状态:false
},
{
物品:“炸弹”,
状态:false
},
{
项目:“字段”,
状态:false
},
{
项目:“字段”,
状态:false
},
{
项目:“字段”,
状态:false
},
{
项目:“字段”,
状态:false
},
{
项目:“字段”,
状态:false
}
],

}
可能是索引16处的对象,0具有相同的引用。就像下面给出的例子一样

var arr=[{“status”:false}];
arr[1]=arr[0];
console.log(arr[0]);
控制台日志(arr[1]);
arr[0]。状态=真;
console.log(arr[0]);

控制台日志(arr[1])可能是索引16处的对象,0具有相同的引用。就像下面给出的例子一样

var arr=[{“status”:false}];
arr[1]=arr[0];
console.log(arr[0]);
控制台日志(arr[1]);
arr[0]。状态=真;
console.log(arr[0]);

控制台日志(arr[1])看起来这两个对象实际上只是一个,在两个位置引用。因此,要解决此问题,您必须克隆/重写其中一个对象,使其不会影响另一个对象:

this.state.itemSquare[0] = {
   item: "bomb"
   status: true
};
然而,在react中重写状态是一件非常非常糟糕的事情。相反,您应该调用
setState
并使用纯函数改变状态:

this.setState(({ itemSquare }) => ({
  itemSquare: itemSquare.map(({ item, status }, index) => ({
    item, status: status || index === 0
  }))
}));

看起来这两个对象实际上只是一个,在两个位置引用。因此,要解决此问题,您必须克隆/重写其中一个对象,使其不会影响另一个对象:

this.state.itemSquare[0] = {
   item: "bomb"
   status: true
};
然而,在react中重写状态是一件非常非常糟糕的事情。相反,您应该调用
setState
并使用纯函数改变状态:

this.setState(({ itemSquare }) => ({
  itemSquare: itemSquare.map(({ item, status }, index) => ({
    item, status: status || index === 0
  }))
}));

您应该在不可变方法中使用
this.setState
方法。

您应该在不可变方法中使用
this.setState
方法。

您应该在不可变appeach中使用this.setState方法。您应该在不可变appeach中使用this.setState方法。