Работа с параллельными запросами в React.JS / Redux (Flux) - PullRequest
0 голосов
/ 13 ноября 2018

Сценарий

  • 2 Предоставлены компоненты контейнера
  • Каждый контейнер подписан на единицу состояния «Корзина». В рамках своей componentDidUpdate они должны перейти и повторно получить данные из API ценообразования и отобразить результаты (т. Е. Промежуточные итоги с предложениями и т. Д.)

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

Выпуск

Проблема в том, что произойдет гонка. Когда корзина обновляется, поток выглядит примерно так

Component1 compenentDidUpdate запущен из-за обновления корзины

  • Проверьте, является ли pricingDetails.isLoading false, если нет данных
  • Dispatch fetchPricingData() - это установит pricingDetails.isLoading в false

Компонент 2 componentDidUpdate запущен

  • Проверьте, * * * * * * * * * * * * * * * * * pricingDetails.isLoading * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *1045* * * * * * * * * * * * * * * * * * *1045* * * * * * * * * * * * * * * * * * * * *1045* Компонент 2 .
  • Выполните второй вызов fetchPricingData - теперь у нас есть 2 вызова API на ходу!

Решение

В настоящее время, кажется, есть несколько способов справиться с этим, но ни один из них не особенно элегантен

1) Делегировать ответственность за выборку данных в контейнер более высокого уровня, где когда-либо будет существовать только один их экземпляр.

2) Пусть каждый контейнер каким-либо образом использует настройку «ведомый / ведущий», где только 1 начальный экземпляр может получать данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...