为什么 NGXS 操作上有 属性 `type`

Why is there a property `type` on a NGXS Action

我正在阅读 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 的工作原理。它不基于实例进行检查。
From the docs:

Each action contains a type field which is their unique identifier.