如何在ngrx存储中使用单个操作更新多个Reducer的状态?

时间:2017-05-22 14:21:43

标签: angular redux ngrx ngrx-store

我的应用程序中有多个reducers,它们组合在app.reducers.ts中。当我的动作发生时,一个reducer的状态应该从另一个reducer的当前状态更新为单个值(因此计划外交付将被调度),然后从第二个reducer的状态中删除该值。 这是我如何删除它,但在此之前我需要更新其他状态。

// Change Eloquent to Array in constructor
$this->game = Game::withTrashed()->with('situation')->find($game_id)->toArray();

// And then change all your toDatabase, toMail, toFacebook etc methods: use $game['name'] instead of $game->name etc.

从应用程序的角度来看,调用2个动作非常糟糕。所以我需要以某种方式在更高层次上处理这个问题。

1 个答案:

答案 0 :(得分:0)

您的商店可以有多个减速器,每个减速器分别作用于该动作。

例如,您可以将它们定义为

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 (...)
....

然后将所有的reducer传递给模块中的ngrx,如

StoreModule.forRoot(reducers)

For a good example, see this repo