首页 > 解决方案 > 为什么 NGXS 操作上有一个属性“类型”

问题描述

我正在阅读有关NGXS的信息,例如,它看起来像这样:

export class NewState {
    static readonly type = '[State] New';
    constructor(public payload: MyState) { }
}

在我的商店里,我可以听到那个动作

@Action(New)
newState(ctx: StateContext<MyState>, { payload }: { payload: MyState }) {
    ctx.setState(payload);
}

所以,尽管我指定了一个静态类型,因为[State] New我没有在任何地方看到它在我的代码中返回。

我的第一个想法是,因为它是一个标识符,如果你有多个操作,就需要它,像这样

@Action(New)
@Action(Add)
newState(ctx: StateContext<MyState>, action: MyState | AddState) {
    if (action.constructor.type === New.type) {
        ctx.setState(payload);
    } else {
        // do something else
    } 
}

但是话又说回来,您type当然可以不这样做,action.constructor === New甚至更好地为每个人使用单独的功能:)

所以,我的问题是:我应该什么时候使用type

标签: ngxs

解决方案


你需要类型。这就是 NGXS 的工作原理。它不基于实例进行检查。
从文档

每个动作都包含一个type字段,这是它们的唯一标识符。


推荐阅读