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

Flux: дёрнуть экшн после другого экшна?

Абстрактный кейс:

Есть у нас стор ItemStore, экшн checkItem и вьюха ItemsView.
Юзер тыкает на item, дёргается checkItem, стор обновляется, вьюха делает re-render. Всё отлично, все счастливы.

Далее появилась необходимость выполнить асинхронный запрос при выборе пользователем итема, после чего обновить другой стор, например LogStore. А такие штуки должны выполняться через асинхронные экшны. То есть, нам нужно дёрнуть один экшн после другого. Назовём этот экшн sendLog. Типа мы посылаем этот итем в какой-то удалённый логгер, а потом пихаем ответ в LogStore (дурацкий пример, ну да фиг с ним).

Можно было бы просто делать запрос в экшне checkItem, но загвоздка в том, что этот sendLog вообще никакого отношения ко всем этим итемам не имеет. И по идее, ни ItemStore, ни checkItem, ни ItemView ничего знать про этот запрос не должны, и запрос должен делаться без их участия. Можно было бы дёргать sendLog в ListView, но, опять же, он там ни к селу, ни к городу.

Слушать checkItem в LogStore и дёргать экшн sendLog или слать запрос из стора нельзя. Не по флаксу это.

Можно было бы в каком-нибудь отдельном классе слушать checkItem и в хандлере дёргать sendLog, но это вроде нарушает undirectional data flow, к тому же мы скорее получим `dispatch in the middle of dispatch`.

В общем, никак не могу прийти к верному решению. Возможно, моя ошибка в самой задаче.

Кейс на основе реальной задачи. Использую flummox.
  • Вопрос задан
  • 116 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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