Как подписаться () на combReducer на Redux?
Я использую Redux на реактивно-нативный с редуксом и реактивно-редуксом. Я использую объединение (), чтобы объединить два редуктора:
const reducers = combineReducers({
sessiontype,
userdata
})
Теперь я подписываюсь на некоторые изменения в моих редукторах:
store.subscribe((state, previousState) => {
//Do something
});
Как подписаться только на мой редуктор пользовательских данных? Потому что, когда я меняю состояние моего редуктора сессионного типа, мне нужно изменить состояние моего редуктора пользовательских данных (и это создает бесконечный цикл в моем store.subscribe(), потому что обнаружение всего редуктора изменилось.... (извините, мой плохой английский)
1 ответ
Концепция Redux заключается в том, что у вас есть только один state
и один reducer
, Идея, что у вас есть отдельные редукторы, - это просто деталь реализации, представленная combineReducers()
- он позволяет вам думать о ваших редукторах по частям, но для вашего приложения есть просто один reducer
, Проверьте обсуждение в этой теме GitHub.
mapStateToProps
функция внутри react-redux
Пакет позволяет выбрать, какие части reducer
компонент имеет доступ к. Это может помочь вам решить вашу проблему. Когда компонент с доступом к sessiontype
обновляет reducer
, вы можете иметь то же самое обновление компонента userdata
, Чтобы сделать это, вы просто dispatch
два отдельных действия к store
, Кроме того, помните, что subscribe
на самом деле не дает вам доступ к store
- это просто даст вам знать, что что-то изменилось. Внутри вашего subscribe
функция, вам нужно позвонить getState()
на самом деле читать данные. Узнайте больше здесь.
Попробуйте что-то вроде этого:
store.subscribe((state, prevState) => {
// run a check of conditions for an action being dispatched
// if you don't specify conditions, you'll end up in an
// infinite loop
if (stateHasFieldOrValue) {
// dispatch update to sessiontype
store.dispatch(updateSessionType(payload));
// dispatch update to userdata
store.dispatch(updateUserData(payload));
}
});