Доступ к состоянию одного редуктора из другого - Redux - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть два редуктора, объединенные с использованием combineReducers()

  1. UI Reducer имеет ключ 'isLoginOpen' (true / false) - при значении true появляется модальный логин.
  2. Auth Reducer имеет ключ 'isAuthenticated' - (истина / ложь), который указывает, если пользователь вошел в систему

У меня также есть создатель действий по имени OpenLoginModal(), который заставляет UI-редуктор сделать true для isLoginOpen.

Я хочу разрешить такое поведение, только если 'isAuthenticated' неверно. I.E, я разрешаю показывать модальный вход только тогда, когда пользователь не вошел в систему.

Проблема в том, что 'isAuthenticated' находится в другом редукторе, и я не хочу дублировать его на редуктор пользовательского интерфейса.

Как мне решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Согласно записи Redux FAQ о состоянии общего доступа между редукторами :

Многие пользователи позже хотят попытаться обмениваться данными между двумя редукторами, но обнаруживают, что combReducers не позволяет им делать это. Существует несколько подходов, которые можно использовать:

  • Если редуктору необходимо знать данные из другого среза состояния, может потребоваться реорганизация формы дерева состояний, чтобы один редуктор обрабатывал больше данных.

  • Возможно, вам придется написать некоторые пользовательские функции для обработки некоторых из этих действий. Это может потребовать замены combReducers на вашу собственную функцию редуктора верхнего уровня. Вы также можете использовать утилиту, такую ​​как Reduce-Redurs, для запуска функциивестиReducers для обработки большинства действий, а также для запуска более специализированного редуктора для конкретных действий, которые пересекают срезы состояний.

  • Создатели асинхронных действий, такие как redux-thunk, имеют доступ ко всему состоянию через getState (). Создатель действия может извлечь дополнительные данные из состояния и поместить их в действие, чтобы у каждого редуктора было достаточно информации для обновления своего собственного среза состояния.

Учитывая ваш вариант использования, я бы рекомендовал написать создатель thunk action, который проверяет state.auth.isAuthenticated и отправляет действие, только если оно ложное.

0 голосов
/ 26 апреля 2018

Редукторы должны быть обеспокоены обновлением состояния.

Вы должны использовать селекторы для расчета состояния приложения, включая то, какие действия разрешены.

В вашем случае код, вызывающий создателя действия (или самого создателя действия, если используется thunk), может выбрать оба значения из хранилища и решить, что делать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...