ERROR TypeError:无法分配为只读对象'[object Object]'的属性'isSelected'

问题描述 投票:0回答:2

我只是想在克隆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
        }
      };
    }
  ),
angular typescript redux ngrx
2个回答
0
投票

由于arrayElement是只读的,所以您也必须复制it

const childArray = childArrayCopy.map(arrayElement=> {
  if (arrayElement.id === desiredId) {
    arrayElement = {...arrayElement, isSelected: false}; // <===
  }
  return arrayElement;
});

[使用spread的对象属性版本来创建带有旧对象属性副本的新对象,然后将isSelected更新为false


0
投票

不允许存储对象的更改,您应该始终为嵌套对象创建一个副本:

const childArray = childArrayCopy.map(arrayElement=> ({
  ...arrayElement,
  isSelected: arrayElement.id === desiredId ? false : arrayElement.isSelected
}));
© www.soinside.com 2019 - 2024. All rights reserved.