2015-08-01 2 views
2

Я создаю простое приложение для начала работы с React, flux & response-router. Это простое приложение для контактов.React + flux: может ли действие вернуть значение? (например, последний созданный id)

Существует несколько видов, таких как «список контактов», «просмотр контакта», «создать контакт».

В режиме «создать контакт» нажатие на кнопку «Сохранить» отправляет действие «создать» в диспетчере, который получает ContactStore и обрабатывается там.

Вот проблема: после создания контакта я хотел бы перейти к представлению «просмотр контакта» для вновь созданного контакта. Но для этого мне нужно знать идентификатор только что созданного контакта.

  • Что должно отвечать за изменение текущего маршрута? Компонент «edit»? ContactStore?
  • И как они должны получить только что созданный идентификатор? Через какой-либо ответный вызов? Или, может быть, в магазине должно произойти событие «clientUpdated»?
+1

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

+0

За что вы согласились? Я столкнулся с той же проблемой ... – Sandro

+0

Я не помню. Я * думаю * Я написал что-то похожее на поток, но на основе обещаний, которые в конечном итоге возвращают ценность. –

ответ

0

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

0

Я бы выбрал событие, как вы предложили, и верните идентификатор с сервера. После этого вы можете использовать тег <Redirect />, который предоставляется React-Router для перенаправления на другой маршрут. На мой взгляд, я думаю, что это был бы самый чистый способ сделать это.

Действие может возвращать значение, но мы пытаемся следовать методу, когда хранилища возвращают значение, а действия вставляют значения. Это позволяет чистым и легким думать о том, кто что делает. Но это соглашение, не означает, что это «правильный» способ.

+1

Проблема с этим решением. Предположим, что хранилище генерирует событие каждый раз при создании нового контакта, и компонент прослушивает это событие и изменяет маршрут после запуска этого события. Как предотвратить перенаправление при запуске этого события, потому что другой компонент называется тем же действием? Я хочу только перенаправить в качестве ответа на действие, вызванное этим конкретным компонентом –