如何在Reducer中对多个动作执行相同的状态转换

时间:2019-12-30 07:36:18

标签: angular ngrx typescript-typings typescript2.0 ngrx-store

根据this video中Mike Ryan的建议,我为我的应用创建了独特的操作 但是我有一些动作导致相同的状态转换。如何在不绕过最佳实践的情况下实现相同的状态转换,即为两个不同的事件调用一个公共动作?

我的操作是

export const rawSignalEditInplace = createAction(
  RawSignalsActionTypes.RAW_SIGNAL_EDIT_INPLACE,
  props<{ signal: RawSignal }>()
);

export const rawSignalEdit = createAction(
  RawSignalsActionTypes.RAW_SIGNAL_EDIT,
  props<{ signal: RawSignal }>()
);

我的减速器

on(rawSignalsActions.rawSignalEditInplace, (state, { signal }) => {
return {
  ...state,
  selectedRawSignal: entitiesSelectors.selectEntities(state)[signal.id]
 };
}),
on(rawSignalsActions.rawSignalEdit, (state, { signal }) => ({
  ...state,
  selectedRawSignal: entitiesSelectors.selectEntities(state)[signal.id]
})),

1 个答案:

答案 0 :(得分:1)

您可以为多个动作创建一个reduce:

on(
  rawSignalsActions.rawSignalEditInplace,
  rawSignalsActions.rawSignalEdit,
  (state, { signal }) => {...}
)

将动作分开放置,可以让您更好地跟踪动作的发源地,并有助于保持模块化,以防将来要更改某些内容。我个人建议采取多种操作->为此,一个减速器模式,尽管其他动作也可能起作用。