只有一个减速器的NGRX的多个存储
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了只有一个减速器的NGRX的多个存储相关的知识,希望对你有一定的参考价值。
我知道它是asked,但尚未直接回答。我希望获得2个以上具有相同reducer / effects / selector / actions的商店。
基本上,我在页面上并排显示一些数据,两者的行为完全相同。
[我知道,我可以做2个功能,side1
,side2
,但是然后我将不得不复制所有选择器,所有动作,所有效果,所有变径器;否则它们将彼此碰撞。
避免代码重复的最佳方法是什么?假设我必须调整所有代码以接受我所有操作的side
参数,这将是一个耻辱。
答案
长话短说-不,没有一种简单的方法。
为此,您需要确保模块不具有导入StoreModule.forRoot
的父类(如AppModule)。然后,您可以在每个模块中导入StoreModule.forRoot
,它将为每个节点创建单独的存储,但是在这种情况下,您无法访问其他存储的数据。
如果您想拥有一个商店,但要以相同的动作来影响不同的功能,则需要为所有动作,化简器和效果实施correlationId
模式,以确保它们不会造成彼此的数据冲突。
也可以像ngrx/data
一样做-通过服务而不是actions
和selectors
访问存储,然后对于每个模块来说都是这样
@Injectable()
export class UserSelectorService implements OnInit {
constructor(
protected serviceFactory: EntityCollectionServiceFactory,
) {
}
public readonly users = this.serviceFactory.create('users');
public readonly data$ = this.users.selectAll();
ngOnInit() {
this.users.load();
}
}
以上是关于只有一个减速器的NGRX的多个存储的主要内容,如果未能解决你的问题,请参考以下文章
我无法在 app.module 中为 ngrx 注册我的减速器
在 @ngrx/store 4.0 中提供 root reducer