如何正确更改对象数组的属性?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方法。