我只是想在克隆NgRx存储对象后更新其数组元素的属性值,以免发生突变但没有成功。这是减速器代码:
on(
myActions.elementDeselected,
(state, { desiredId}) => {
const childArrayCopy=[...state.selectedObject.childArray.slice(0)];
const childArray = childArrayCopy.map(arrayElement=> {
if (arrayElement.id === desiredId) {
arrayElement.isSelected = false;
return arrayElement;
}
return arrayElement;
});
return {
...state,
selectedObject: {
...state.selectedObject,
...childArray
}
};
}
),
由于arrayElement
是只读的,所以您也必须复制it:
const childArray = childArrayCopy.map(arrayElement=> {
if (arrayElement.id === desiredId) {
arrayElement = {...arrayElement, isSelected: false}; // <===
}
return arrayElement;
});
[使用spread的对象属性版本来创建带有旧对象属性副本的新对象,然后将isSelected
更新为false
。
不允许存储对象的更改,您应该始终为嵌套对象创建一个副本:
const childArray = childArrayCopy.map(arrayElement=> ({
...arrayElement,
isSelected: arrayElement.id === desiredId ? false : arrayElement.isSelected
}));