Какой правильный подход для реализации асинхронных действий в парадигме Redux?
Лирика
Решил применить для реализации приложения подход Flux, и взял за основу реализацию Redux + React.
Много прочитал про то, где описывается бизнес-логика, про чистые функции в reducers и actions, про проектирование структуры хранилища (store, state), и самое главное - проблема асинхронные вызовы. В связи с этим есть небольшой бардак в голове, поэтому хочу немного разобраться в следующем вопросе.
Суть
Есть приложение, которое прежде, чем начнет свою работу, должно инициализироваться. Под инициализацией я имею ввиду ряд действий со стороны приложения, после выполнения которых оно считается проинициализированным.
Соответственно у приложения появляется некое состояние isInitialized, которое в начале установлено как false. И чтобы это состояние перевести в true, необходимо выполнить, к примеру, несколько действий:
- Получить первый конфиг из одного источника
- Получить второй конфиг из второго источника
- Объединить результат этих конфигов в один
- Сказать приложению, что теперь мы инициализировались и у нас есть все данные, для отображения первой страницы.
- Или подпункт, сказать приложению что мы не смогли инициализироваться и далее продолжать работу невозможно.
Вопрос: Каким образом лучше это реализовать?
На чем ступор:
Ступор в правильном подходе
- где реализовать логику ожидания двух запросов и объединению конфигов
- как правильно реализовать работу с двумя асинхронными вызовами API сервиса, от результатов которых зависит одно свойство состояния.
Если не знаете английский - не путайте людей. Side Effect - это побочный эффект, ошибка в логике приложения. Замените все ваши "side effect" на "ajax запрос"
Конфиги нужно получать синхронно или асинхронно? В любом случае получение лучше реализовать в actions. Какие-то манипуляции тоже. Диспатчить их тогда, когда понадобится. Вот туториал по асинхронной подгрузке json