Приветствую!
1. В начале изучения Redux показалось жутко неудобно прописывать в отдельном файле action constants, затем подключать их для работы с action creators, reducer, component. Поэтому перенес объявление типов actions в reducer, там же формируются action creators с одноименными названиями, благодаря чему прописывать названия actions приходится ощутимо реже.
2. Чтобы не иметь головной боли с нарушением чистоты reducer, вынес из него логику обновления состояния в компоненты.
Пример кода получившегося reducer:
import { createStore } from "redux";
const updateState = (action) => (...actionConstants) => {
const { type, payload } = action;
if (!reducer.actions) {
reducer.actions = actionConstants.reduce((acc, cur) => {
acc[cur] = (payload) => ({ type: cur, payload });
return acc;
}, {});
}
return actionConstants.includes(type) ? payload : {};
};
const getStore = () => {
reducer();
const { actions } = reducer,
store = createStore(reducer);
return { actions, store };
};
const initialState = {
products: [],
isLoading: true,
};
function reducer(state = initialState, action = {}) {
const newState = updateState(action)(
"UPDATE_PRODUCTS",
"TOGGLE_SPINNER",
"REMOVE_FILE",
);
return { ...state, ...newState };
}
const { store, actions } = getStore();
export { store, actions as default };
Имеет ли право на существование такой подход или возможны проблемы?