javascript - 如何设计商店(应用程序的状态),以便我们直接更改商店中的数据而无需操作,reducers?
问题描述
原因: 即使对于简单的操作,Action 也引入了巨大的样板。它使简单的代码变得复杂。
目标:例如
interface Contact {
name: string,
id: string,
}
interface State {
c1:Contact;
c2:Contact;
}
let store: MyStore<State>;
store.operateOn(['c1'],(c:Contact)=>c.name='New name'); //['c1'] denotes path to contact
所以在store.operateOn()
执行后会发生真正的状态变化,并通知相关的订阅者。
摘要:是否有任何像 db 这样的 ngrx/store 可以让我们直接/间接更改数据而无需任何操作。
解决方案
我创建了一个库来做到这一点。它被称为ng-app-state
,它是@ngrx/store
. 在您的示例中,您将使用如下命令更新商店:
store('c1')('name').set('New name');
它还提供了一个类似的界面来观察商店在任何级别的变化。例如观察所有c1
使用的变化
store('c1').$.subscribe(...);
为此,您可以按如下方式定义 MyStore 服务:
@Injectable()
export class MyStore extends AppStore<State> {
constructor(store: Store<any>) {
super(store, "myState", new State());
}
}
当然,您的应用程序模块中也有一些设置。在 GitHub 页面了解更多信息:https ://github.com/simontonsoftware/ng-app-state
推荐阅读
- python - file.write 不会写入文件,但普通文本会 - 为什么会发生这种情况?
- firebase - 帐户不使用 GCP 计算时 GCP Compute Engine API 中的神秘指标
- python - 如何在没有单独的环境变量系统的情况下在本地从 Helm 获取值?
- python - 如何在 Python 中使生成的矩阵不重复?
- task - 创建虚拟 asyncio.Task
- directory - 使用 xargs 创建远程目录
- java - HackerRank-类解决方案中的方法calculateSum不能应用于给定类型
- javascript - 无法再在 Chrome 中检查对象
- python - 将枕头 Gif 复制到 Windows 剪贴板
- c++ - 如何从不同的类中获取函数来调用在 Main 中声明的对象?