我将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 {
}
谢谢。
答案 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)
})
);
}
}