首页 > 解决方案 > 如何设计商店(应用程序的状态),以便我们直接更改商店中的数据而无需操作,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 可以让我们直接/间接更改数据而无需任何操作。

标签: javascriptangular

解决方案


我创建了一个库来做到这一点。它被称为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


推荐阅读