У меня есть приложение, в котором есть несколько магазинов с одинаковыми функциями редуктора. Я попытался сделать общий редуктор, и он работал нормально.
общие настройки редуктора:
interface State<T> {
itemList : T[]
}
const initialState: State<any> = {
itemList: []
}
const createReducer = <T>(type: string) => {
return <T>(state = initialState, action: any): State<T> => {
switch (action.type) {
case types.get(type).Add:
return {
...state,
itemList: [...state.itemList, action.payload]
}
case types.get(type).AddList:
return {
...state,
itemList: [...state.itemList, ...action.payload]
};
default:
return state;
}
}
}
Тогда я бы комбинировал редукторы следующим образом:
export const reducers: ActionReducerMap<AppState> = {
vehiculeState: createReducer<Vehicule>('vehicule'),
rentState: createReducer<Rent>('rent'),
clientState : createReducer<Client>('client'),
companionState : createReducer<Client>('companion'),
paymentState : createReducer<Payment>('payment'),
notificationState : createReducer<Notification>('notification'),
employeeState : createReducer<Employee>('employee')
}
Проблема в том, что при переходе в общий режим мне пришлось бы переписать большую часть моего приложения, поскольку я уже создал несколько редукторов с состояниями, которые содержат свойства с именами (clientList
, vehiculeList
, ...) , а имя свойства itemList
не очень информативно. Поэтому мой вопрос заключается в том, как перейти в общий режим и сохранить свойства состояния такими, какие они есть?
Пример токовых редукторов:
export function rentReducer(state = initialState, action: rentActions.RentActions): State {
switch(action.type){
case rentActions.ADD_RENT:
return{
...state,
rentList : [...state.rentList, action.payload]
}
case rentActions.ADD_RENT_LIST:
return {
...state,
rentList : [...state.rentList, ...action.payload]
};
default:
return state;
}
}