Задать вопрос

Как осуществить связь между отдельными reducers в redux?

Всем привет. Недавно начал работать с redux. До этого написал пару приложений на Flux.
Работая со сторами в flux можно при экшене менять несколько полей дерева состояния, то есть осуществить зависимость одного от другого.
В redux же столкнулся с проблемой: как осуществить зависимость между двумя reducers.
Например есть форма из двух полей и кнопка отправки, если поля пустые кнопка не доступна.
Во flux вызывал action CHANGE_FIELD и на него менял _field1Value или _field2Value, далее вызывал функцию checkValid(_field1Value,_field2Value) и возвращал isValid

получал дерево:
{
field1Value:'some text',
field2Value:'',
isValid:'false'
}
В redux же нашел два выхода либо использовать один глобальный reducer, или же через mapStateToProps посылать в кнопку значения полей и там формировать свойство isValid для кнопки.
Но, все же хотелось бы узнать можно ли реализовать зависимость reducers в redux?
  • Вопрос задан
  • 2063 просмотра
Подписаться 3 Оценить Комментировать
Решения вопроса 1
Зависимостей, как правило нет. Но можно сделать вложенные редьюсеры:
const myReducer = combineReducers({ connectedReducer1, connectedReducer2 })

PS для форм используйте redux-form.

UPD1 При этом вы можете вручную вызывать вложенные редьюсеры:

function combinedReducer(state = initialState, action = {}) {
  switch(action.type) {
    case SOME_COMPLEX_ACTION:
      return {
         ...state,
         someProp: someOtherReducer(state.someProp, { type: OTHER_ACTION, payload: action.payload.something })
      }
    default:
      return {
         ...state,
         someProp: someOtherReducer(state.someProp)
      }
  }
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Superilya
redux головного мозга, он для этого не нужен, поэтому связанные редюсеры в любом случае костыль. Нужны связанные редюсеры, приконнекти кнопку к данным и в зависимости от них дизэйбли её.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы