使用 ngxs 更改 属性 的值

Change the value of a property using ngxs

我有嵌套对象,只想更改嵌套对象中一个 属性 的值。

我尝试过打补丁,immer,但在所有情况下我都不明白为什么不可能。

有时报告 属性 是只读的,有时该对象不可扩展。

使用补丁,我无法做到,因为它需要输入所有对象属性。

而且由于该对象还有其他对象和许多其他属性,我只想更新一个 属性。

显然我做错了什么。

  @Action(SetPropertyValueAction)
  public setPropertyValueAction(ctx: StateContext<OneStateModel>, { propertyValue }: SetPropertyValueAction) {
    // Of course this does not work, but it is to show what I need to happen.
    const state = ctx.getState();
    const obj = state.obj;
    obj.object1.object2.object3.property1 = propertyValue;
    ctx.patchState({ obj });

    // I would like to do something like that, but I can't.
    ctx.patchState({
      obj: {
        object1: {
          object2: {
             property1: propertyValue
          }
        }
      }
    });
  }

问题是该对象具有复杂的结构,我无法报告其所有属性。

obj: {
   prop1: number,
   prop2: number,
   prop3: number,
   object1: {
      prop1: number,
      prop2: number,
      object2: {
        prop1: number,
        prop2: number
      }
   },
}

当您使用商店模式时,您永远不会修改商店中的任何对象。您需要一个新对象进行更改。使用扩展运算符 ... 使这更容易。

ctx.setState({
  ...state,
  obj: {
    ...state.obj,
    object1: {
      ...state.obj.object1,
      object2: {
        ...state.obj.object1.object2,
        object3: {
          ...state.obj.object1.object2.object3,
          property1: propertyValue,
        },
      },
    },
  },
});