Приветствую!
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 };
Имеет ли право на существование такой подход или возможны проблемы?