我有多个选择器,但是当我分派一个时,它们都获得相同的状态。为每个 Action 使用不同的 reducer 函数确实有效,但会产生大量重复代码。有没有办法创建一个通用的减速器?
export interface DataImportStoreState {
dataImportAllocationClasses: fromReducers.DataImportState;
dataImportFunds: fromReducers.DataImportState;
}
export const dataImportReducer: ActionReducerMap<DataImportStoreState> = {
dataImportAllocationClasses: dataImportFundsReducer, // Works fine if i have dataImportAllocationClassesReducer
dataImportFunds: dataImportFundsReducer,
};
export const getDataImportSoreState
= createFeatureSelector<DataImportStoreState>(
'dataImport',
);
export const getDataImportAllocationClassesState = createSelector(
getDataImportSoreState,
(state: DataImportStoreState) => state.dataImportAllocationClasses,
);
export const getDataImportFundsState = createSelector(
getDataImportSoreState,
(state: DataImportStoreState) => state.dataImportFunds,
);
这将是理想的。目前我唯一的解决方案是为每个导入制作其中一个。我有 15 个导入调用,我不想维护 15 个基本相同的单独文件。
export function dataImportFundsReducer(
state = defaultDataImportState,
action: fromActions.DataImportFundsAction | fromActions.ImportAllocationClassesAction,
): DataImportState {
switch (action.type) {
case fromActions.IMPORT_ALLOCATION_CLASSES:
case fromActions.IMPORT_FUNDS: {
console.log(action.type, action.payload);
return {
...state,
};
}
}
答案 0 :(得分:1)
您可以通过使用 combineReducers
使用高阶reducer
高阶reducer是一个以名称作为参数的函数 并返回一个新的 reducer 函数作为结果。我们可以使用这种模式 创建一个 reducer 的新实例
对于您的情况,this post 会很有用。