Доброго времени суток. Приложение реакт натив с редуксом. Есть набор действий. Есть набор редукторов. И есть функция, вызывающая изменения состояния, то есть "действие". Тут вроде все понятно.
кодexport const endOrderCreateAction = (dispatch, orderStatus) => {
return {
type: END_ORDER_CREATE,
orderStatus: orderStatus
}
};
.........
const orderReducer = (state = {data: [], loading: false}, action) => {
switch(action.type) {
case END_ORDER_CREATE:
return {...state, loading: true};
...........
fetch().then(r => dispatch(endOrderCreateAction(dispatch, r)));
Но потом появилась необходимость сделать несколько действий после отработки функции, соответственно изменить несколько раз состояния. В конкретном примере с заказом надо 1) убрать анимацию загрузки 2) вывести сообщение об успехе 3) добавить в список "мои заказы". Это можно сделать в двух местах: редуктор и функция, изменяющая состояние.
во втором случае несколько раз перерисовка.
fetch().then(r => {
dispatch(endOrderCreateAction(dispatch, r));
dispatch(stopLoadingAction(dispatch, r));
....
});
В первом случае получается каша из состояний,
const orderReducer = (state = {data: [], loading: false}, action) => {
switch(action.type) {
case END_ORDER_CREATE:
..........
const loadingReducer = (state = {data: [], loading: false}, action) => {
switch(action.type) {
case END_ORDER_CREATE:
case END_USER_LOADING:
case END_SECTION_LOADING:
..........
// одно изменение состояния ловят сразу несколько редукторов
либо
const orderReducer = (state = {data: [], loading: false}, action) => {
switch(action.type) {
case END_ORDER_CREATE:
return {...state, loading: false}
// собираем итоговый state
state = {
loading: orderReducer.loading || sectionReducer.loading || userReducer.loading
}
Как правильно сделать?