Должно ли действие ngrx запускать все редукторы - PullRequest
0 голосов
/ 11 января 2019

У меня довольно простое приложение, и я впервые использую 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, но я вижу, что он запускает оба. Это также раздражает, потому что вторым аргументом BReducer является действие AAction, хотя я параметризирую второй аргумент для типа BAction.

Так есть ли способ, чтобы ngrx мог запускать только соответствующие редукторы? Или дизайн, который запускает их всех, а не относящиеся к делу просто тривиально возвращают магазин?

1 Ответ

0 голосов
/ 11 января 2019

Насколько я понимаю, это типичное NgRx поведение. Для NgRx все actions являются независимыми / не связанными независимо от того, в каком файле вы их определяете. То же самое относится и к reducers, вы будете использовать разные файлы для обеспечения его поддержки, но NgRx проходит через все редукторы для каждое отправленное действие.

Однако, что вы обычно делаете в reducer, это когда case для обработки действия реализуется, если вы return из этого case, NgRx прекращает поиск остальных из редукторов.

Так в вашем случае:

export function AReducer(state, action : AActions) {
  switch(action.type){
    case actions.AAction:
    return {...state} // this is when NgRx stops looking for the case to handle an action
  }
}
...