是一个ngrx动作是否应该触发所有的reducer

时间:2019-01-11 14:14:26

标签: angular redux ngrx ngrx-store

我有一个非常简单的应用,并且是第一次使用ngrx

reducer.module.ts

@NgModule({
 imports:[
  StoreModule.forRoot({
   sliceA: AReducer,
   sliceB: BReducer 
  })
 ]
})

AReducer.ts

export function AReducer(state, action : AActions) {
  switch(...)
}

BReducer.ts

export function AReducer(state, action : BActions) {
  switch(...)
}

someComponent.ts

store.dispatch(new AAction());

现在我希望ngrx只会触发AReducer而不触发BReducer,但是我看到它同时触发了两者。这也很令人讨厌,因为即使我将第二个参数参数化为BAction类型,BReducer的第二个参数也是AAction。

那么有什么办法可以让ngrx只触发相关的reducer?还是触发所有设计的设计,而无关紧要的设计只是简单地退货了?

2 个答案:

答案 0 :(得分:3)

据我了解,这是典型的NgRx行为。对于NgRx,所有actions都是独立的/无关的,无论您在哪个文件中定义它们。reducers都一样,您将使用不同的文件来使其可维护,但是{{1 }}对所有分派的动作进行所有化简。

但是,在NgRx中通常要做的是,当实施reducer处理动作时,如果您case来自returncase停止寻找其余的减速器。

所以在您的情况下:

NgRx

答案 1 :(得分:0)

这让我发疯了大声笑

如NgRX指南中所述:

当分派动作时,所有已注册的减速器都会收到该动作

https://ngrx.io/guide/store/reducers