Заполнение нескольких магазинов и ожидание

Рассмотрим изоморфное приложение на основе Flux и использование библиотеки Fluxible для этого. У вас есть приложение электронной почты React со списком сообщений слева и текущим открытым сообщением справа.

Ваш маршрутизатор запускает действие "SHOW_POST", когда его вызывают с URL-адресом "/message/123", и действие загружает данные, обновляет хранилище, и, таким образом, сообщение появляется справа. Все это работает, обещание навигации разрешено и страница отображается.

Однако страница отображается без списка сообщений слева. Если во время SHOW_POST вызывается действие "LOAD_ALL_MESSAGES", они фактически не отображаются на сервере, сервер возвращает пустой список, и они загружаются через AJAX на клиенте.

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

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

Какова предпочтительная архитектура для заполнения фоновых хранилищ во время рендеринга на стороне сервера. Запустить несколько действий из каждой навигации и дождаться их разрешения?

1 ответ

Решение

Я придерживаюсь этого подхода,

  1. action Метод таких маршрутов (требующий данных из нескольких хранилищ) выглядит так:

    action: function (context, payload, done) {
      var getXData = новое обещание (функция (решить){
        context.executeAction(getXDataAction, {}, разрешение);
      });
      var getYData = new Promise(функция (разрешить){
        context.executeAction(getYDataAction, {}, разрешение);
      });
      Promise.all([getXData, getYData]). Then(function() { done() });
    }
  2. Внутри этих действий я проверяю, существуют ли данные в соответствующих хранилищах, чтобы не извлекать их извне.

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

Другие вопросы по тегам