Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.04.2019, 22:07
R2R R2R вне форума
Интересующийся
Отправить личное сообщение для R2R Посмотреть профиль Найти все сообщения от R2R
 
Регистрация: 22.08.2018
Сообщений: 13

Redux и React. Перенос типов из actions в reducer и логики из reducer в component
Приветствую!

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 };


Имеет ли право на существование такой подход или возможны проблемы?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск