NGRX的多个商店只有一个减速器

时间:2020-04-22 01:30:11

标签: angular ngrx ngrx-store

我知道它已经asked,但尚未直接得到答复。 我希望获得2个以上具有相同的reducer / effects / selector / actions的商店。

基本上,我在页面上并排显示一些数据,两者的行为完全相同。

我知道,我可以做2个功能,side1side2,但是随后我将必须复制所有选择器,所有动作,所有效果,所有化简器;否则它们会相互碰撞。

在避免代码重复的同时实现此目的的最佳方法是什么?假设我必须修改所有代码以接受我所有操作的side参数,这将是一个耻辱。

1 个答案:

答案 0 :(得分:0)

长话短说-不,没有一种简单的方法。

要执行此操作,您需要确保模块不具有导入StoreModule.forRoot的父类(如AppModule)。然后,您可以在每个模块中导入StoreModule.forRoot,它将为每个节点创建单独的存储,但是在这种情况下,您无法访问其他存储的数据。

如果您想拥有一个商店,但要以相同的动作影响不同的功能,则需要对所有动作,化简器和效果实施correlationId模式,以确保它们不会造成数据冲突

您也可以像ngrx/data一样做-通过服务而不是actionsselectors来访问存储,然后对于每个模块都是如此

@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();
   }
}