更新数组内对象的NGXS状态

时间:2020-08-02 07:32:51

标签: ngxs

我将NGXS状态定义为数组。

session.cookies

现在让我们说我的状态为interface Sample { name: string; age: number; } @State<Sample[]>({ name: 'samples', defaults: [] as Sample[] }) @Injectable() export class SampleState { }

如何添加基于名称修改样本年龄并更新状态的操作。 如果它是一个对象,我可以使用简单的patchState,但是这里的状态是一个数组,所以我不确定。

[{name:'abc', age: 1}, {name: 'def', age:2}]

这是我在SampleActions中定义的操作

  @Action(SampleActions.UpdateAge)
  updateAge(context: StateContext<Sample[]>, action: SampleActions.UpdateAge): void {    
  }

谢谢。

1 个答案:

答案 0 :(得分:2)

NGXS中最简单的方法是使用State Operators-在这种情况下,使用提供的updateItem运算符。

例如稍微重构您的状态模型

interface SamplesStateModel { 
  samples: Sample[];
}

@State<SamplesStateModel>({
   name: 'samples' 
  }
)
export class SamplesState {

   @Action(SampleActions.UpdateAge)
   updateAge(context: StateContext<Sample[]>, action: SampleActions.UpdateAge): void { 
     const updatedSample: Sample = { name: action.name, age: action.age };
     ctx.setState(
        patch({
          samples: updateItem<Sample>(sample => sample.name === action.name, updateSample)
        })
     );
   }
}