Вы просто приближаетесь к ней с неправильной точки зрения, вам никогда не следует изменять одну и ту же переменную в двух редукторах, вместо этого вы хотите иметь один counterReducer
, который обрабатывает все действия, которые изменяют счетчик:
const initialState = {
counter: 0,
};
const reducer = (state = initialState, action) => {
switch(action.type) {
case actionType.INCREMENT:
return {
...state,
counter: state.counter + 1
};
break;
case actionType.DECREMENT:
return {
...state,
counter: state.counter - 1
}
break;
default:
return state;
}
}
export default reducer;
Разделение на несколько редукторов - это способ упорядочить ваш код, но у вас никогда не будет двух редукторов, каждый из которых может изменять одно и то же. Вместо этого каждый редуктор должен обрабатывать определенную «часть» вашего общего состояния, например,
const totalState = {
activeUser: { /* username, email, phone, etc */ },
friends: [],
subscriptions: [],
history: [],
// etc.
}
, тогда у вас могут быть activeUserReducer
, friendsReducer
, subscriptonsReducer
, historyReducer
и др. c , И каждый из них будет обрабатывать эту часть состояния, но никогда не попадет в другое состояние редукторов.
Если вам нужно изменить два разных свойства одним действием, вы просто сделаете:
const mapDispatchToProps = dispatch => {
return {
increment: () => {
dispatch(counterAction('INCREMENT'));
dispatch(someOtherAction());
}
};
};