Полагаю, что единственным решением здесь является использование metaReducer, проверьте эту статью: https://netbasal.com/implementing-a-meta-reducer-in-ngrx-store-4379d7e1020a
Описание: metaReducer - это своего рода редуктор, который стоит над другими редукторами.Он должен иметь свои собственные действия, может иметь свои собственные эффекты.Вы можете использовать его таким образом:
export function metaReducer( reducer ) {
return function reduce( state: ParentState, action: MetaReducerAction ) {
switch(action.type)
case PARENT_ACTION:
return {
...state,
people: peopleReducer(state.people, new DoSthWithPeople()),
pets: petsReducer(state.pets, new DoSthWithPets())
}
default:
return reducer(state, action);
}
}
Где:
interface ParentState {
pets: PetsState,
people: PeopleState
}
type MetaReducerAction = ParentAction <-- this has type PARENT_ACTION
Так что рабочий процесс прямо вперед.В месте, где вы хотите, чтобы действие обновляло состояния как людей, так и животных, вам нужно отправить PARENT_ACTION, тогда действия DoSthWith ... будут запущены на обоих слоях состояния.Если вы отправляете другое действие (действие типа, которое не обрабатывается metaReducer, поэтому отличается от PARENT_ACTION), оно позволит другим редукторам обрабатывать действие (проверьте, что в разделе по умолчанию).
Последнеечасть - это конфигурация, она должна выглядеть следующим образом:
StoreModule.forFeature(compose(metaReducer, combineReducers)(reducers))
Где редукторы просто:
const reducers = {
pets: petsReducer,
people: peopleReducer
}
Редактировать: форматирование