Добрый день! Пробую переписать редюсер через High-Order-Reducer, пока не совсем понял как это оптимизировать, чтобы не сделать хуже.
Например есть такой редюсер (который может быть в раз больше)
const createAsyncReducer (state, action) => {
switch (action.type) {
case "USER_REQUEST":
return {
...state,
isFetching: true
}
case "USER_SUCCESS":
return {
...state,
isFetching: false,
data: action.payload,
error: void 0,
}
case "USER_FAILURE":
return {
...state,
isFetching: false,
error: action.payload
}
case "USER_SOME_ACTION":
return {
...state,
isFetching: false,
error: action.payload.some
}
default: return state;
}
}
и нашел такую запись через High-Order. Вопрос как его можно еще улучшить?
const createAsyncReducer = (constants) => (state, action) => {
switch (action.type) {
case constants[0]:
return {
...state,
isFetching: true
}
case constants[1]:
return {
...state,
isFetching: false,
data: action.payload,
error: void 0,
}
case constants[2]:
return {
...state,
isFetching: false,
error: action.payload
}
default: return state;
}
}
const todosReducer = createAsyncReducer([
"TODOS_REQUEST",
"TODOS_SUCCESS",
"TODOS_FAILURE"
]);
const withAddTodo = reducer => (state, action) => {
const nextState = reducer(state, action);
switch (action.type) {
case "ADD_TODO":
return {
...nextState,
data: [...nextState.data, action.payload]
};
default:
return nextState;
}
};
const customReducer = withAddTodo(todosReducer);
Код от этого только вырос...
Расскажите пожалуйста у кого какой опыт с этим и лучшие практики по оптимизации этого.
Спасибо!