为什么 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.
我正在阅读 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.