Вы можете просто использовать: createReducer из redux-starter-kit
Что также используется в этой демонстрации от Microsoft
Вспомогательная функция, позволяющая определить редуктор как отображение типа действия на функции редуктора случая, которые обрабатывают эти типы действий. Начальное состояние редуктора передается в качестве первого аргумента.
Тело каждого редуктора case неявно оборачивается вызовом методаручки () из библиотеки immer. Это означает, что вместо возврата нового объекта состояния вы также можете напрямую изменить переданный объект состояния; затем эти мутации будут автоматически и эффективно переведены в копии, что обеспечит вам удобство и неизменность.
@ param initialState - Начальное состояние, которое должно быть возвращено редуктором.
@param actionsMap - Отображение типов действий в спецификаторы типов действий, определяемые c.
Использование
export const LocalStorageReducer = createReducer<Store['localStorage']>(
new LocalStorage(), // <= where you define the init value of this state
{
storeLocalStorageInput(state, action) {
return state = {...state, [action.payload.item]: action.payload.value};
},
clearLocalStorageInput(state, action) {
return state = new LocalStorage();
},
}
);
export const reducer = combineReducers({
localStorage: LocalStorageReducer,
...
тип createReducer
(alias) createReducer<LocalStorage, CaseReducers<LocalStorage, any>>(initialState: LocalStorage, actionsMap: CaseReducers<LocalStorage, any>): Reducer<LocalStorage, AnyAction>
import createReducer
образец состояния
export class LocalStorage {
/**
* Editing plan id in planner pages
*/
planId: string | undefined;
/***
* Touched id list
*/
touchedIdList: Array<string>;
constructor() {
this.planId = undefined;
this.touchedIdList = Array<string>();
}
}
Уже разработаны методы чтобы делать это с помощью libs, в большинстве случаев нет необходимости делать это вручную.