Как обновить состояния нескольких редукторов одним действием в магазине ngrx?

В моем приложении несколько редукторов, которые объединены в app.reducers.ts. Когда мое действие происходит, состояние одного редуктора должно быть обновлено одним значением из текущего состояния другого редуктора (так что незапланированная доставка станет запланированной), а затем удалить это значение из состояния второго редуктора. Вот как я могу его удалить, но перед этим мне нужно обновить другое состояние.

case UNPLANNED_ACTIONS.REMOVE_UNPLANNED_DELIVERY:
        return Object.assign({}, state, {
            deliveries: state.deliveries.filter(delivery => delivery.deliveryId !== payload.deliveryId)
        });

Вызов двух действий - это очень плохо с точки зрения приложения. Так что мне нужно как-то справиться с этим на более высоком уровне.


person Blind Despair    schedule 22.05.2017    source источник
comment
Нет необходимости запускать 2 действия. Вы можете обрабатывать те же действия в 2! = Редукторах. Это не относится к ngrx, а является основным элементом Redux. Вам стоит заглянуть на redux.js.org :)   -  person maxime1992    schedule 23.05.2017


Ответы (1)


В вашем магазине может быть несколько редукторов, каждый из которых действует отдельно от действия.

Например, вы можете определить их как

export function reducer(
  state = initialState,
  action: fromMyStoreActions.DeliveryAction
): AppState{

  switch (action.type) {
    case UNPLANNED_ACTIONS.REMOVE_UNPLANNED_DELIVERY:
         return Object.assign({}, state, {
              deliveries: state.deliveries.filter(delivery => delivery.deliveryId !== payload.deliveryId)
         });
    ...
}

// Another Reducer
export function reducer(
      state = initialState,
      action: fromMyStoreActions.DeliveryAction
    ): AppState{

      switch (...)
....

А затем передайте все редукторы в ngrx в модуле, например

StoreModule.forRoot(reducers)

Для хороший пример, см. это репо

person rayray    schedule 22.08.2018