2016-06-20 4 views
1

Я пытаюсь понять, как я должен структурировать мое приложение redux, если мне нужно получить данные, из нескольких конечных точек, которые зависят друг от друга.Управление зависимостью данных Redux

Например, скажем, у меня есть компонент, в котором перечислены сведения о событиях. У меня есть идентификатор события, и мне нужно получить всю информацию для этого события, а также все события, происходящие между событиями. Для того, чтобы узнать, какие события нужно искать, мне нужно получить время начала и окончания выбранного события.

Как структурировать компонент для его обработки? До сих пор я думал, что-то вроде:

({event, conflictingEvents,fetchEvent, fetchConflictingEvents}) => { 
    if (!event || !conflictingEvents) { 
     if (!event) fetchEvent(); 
     if (!conflictingEvents) fetchConflictingEvents(event.start, event.end) 
      return (/* empty state */); 
    } 
    return (/* actual state */); 

Проблема с вышесказанным, что это зависит от кэширования, чтобы не создавать бесконечный цикл.

+0

Это вопрос о скидках или о том, как построить компонент? Кроме того, в чем заключается управление зависимостями? – lux

ответ

4

Если я правильно вас понимаю, вы пытаетесь организовать несколько асинхронных HTTP-вызовов и обновлять состояние своего приложения, когда вы идете, правильно?


идиоматические подход к решению этой задачи будет использования async actions. Это позволяет вам запускать процедуру загрузки из ваших компонентов React посредством одной отправки вашего асинхронного действия. Это асинхронное действие затем координирует вызовы на ваш сервер и сопоставление данных между вызовами.

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

В результате у вас есть , инкапсулировавший оркестровку ваших вызовов API полностью. Ни компонент React, который отображает ваше приложение, ни ваши редукторы не должны знать о порядке вызовов, или какую информацию вы передаете между ними. Для них имеет значение только промежуточный и конечный результат ваших вызовов, которые должны быть частью вашего состояния.


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

+1

это более или менее попадает в суть проблемы. Наверное, у меня был узкий взгляд на асинхронные действия. Я не считал, что асинхронное действие может выполнять несколько синхронных запросов ajax и отправлять синхронные действия на этом пути. TLDR: асинхронные действия очень гибкие. –

+0

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

 Смежные вопросы

  • Нет связанных вопросов^_^