ngxs - 为什么 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 的工作原理。它不基于实例进行检查。
从文档:
每个动作都包含一个
type
字段,这是它们的唯一标识符。
推荐阅读
- java - 递归文件搜索指定扩展名
- java - 如何制作从泛型超类扩展的非泛型类
- mysql - MySQL 如何从缓冲池中逐出页面?
- node.js - 如何将套接字连接到服务器?
- amazon-athena - HIVE_METASTORE_ERROR 预期为“STRING”,但找到了“STRING”
- jquery - 使用 sessionStorage 的 JQuery 函数不适用于 .aspx 文件
- mongodb - 如何在 mongodb 过滤器中使用计算日期?
- javascript - 如何根据内部子数组的第一项合并二维数字数组?
- c# - 如何获取给定月份生日表上的用户列表?
- swift - 将 do catch 块放入数组