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

Muh*_*ooq 1 ngrx typescript-typings typescript2.0 angular ngrx-store

我按照 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 }>()
);
Run Code Online (Sandbox Code Playgroud)

我的减速机是

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]
})),
Run Code Online (Sandbox Code Playgroud)

Wil*_*der 5

您可以为多个操作创建一个减速器:

on(
  rawSignalsActions.rawSignalEditInplace,
  rawSignalsActions.rawSignalEdit,
  (state, { signal }) => {...}
)
Run Code Online (Sandbox Code Playgroud)

将您的操作分开可以让您更好地跟踪操作的发送位置,并帮助您保持模块化,以防您将来想要更改内容。出于这个原因,我个人推荐多个操作 -> 一个减速器模式,尽管其他操作也可能有效。