3

我的应用程序中有多个减速器,它们组合在 app.reducers.ts 中。当我的操作发生时,一个减速器的状态应该使用另一个减速器当前状态的单个值更新(因此计划外的交付将成为计划),然后从第二个减速器的状态中删除该值。这是我可以删除它的方法,但在此之前我需要更新其他状态。

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

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

4

1 回答 1

2

您的商店可以有多个减速器,每个减速器单独作用于动作。

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

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)

一个很好的例子,看这个 repo

于 2018-08-22T15:18:07.640 回答