Избегайте дублирования вызовов для получения стабильных данных

В настоящее время я экспериментирую с Contentful как с услугой для предоставления данных, которые можно редактировать и обновлять, не вызывая совершенно новый цикл тестирования / развертывания. Поскольку я объединяю свой магазин Redux в локальное хранилище, я пытаюсь выяснить схему, в которой я не запрашиваю эти данные повторно чаще, чем каждые [x], где [x] может быть ограничением по времени от миллисекунд. к дням.

В этом примере я использую Redux-Thunk, чтобы позволить мне выполнять асинхронные действия.

Действия

Первая часть - это действия, разрешенные в моем редьюсере.

  • Прервать: действие, которое мы запускаем, если кеш «свежий».
  • Ошибка: сохраните ошибку для любого необходимого использования (это действие может быть ловушкой для подключения внешнего ведения журнала).
  • Старт: установите isFetching в true для любого вида уведомления пользователя об асинхронном процессе.
  • Обновить: установите возвращаемые данные в качестве значения.

Создатели синхронных действий

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

Создатель асинхронных действий

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

Редуктор и InitialState

Редуктор обрабатывает все синхронные действия, отправленные в течение жизненного цикла асинхронной функции, а также обрабатывает установку значений isFetching и lastFetched. Вы можете легко передать эту логику создателям действий и избежать каких-либо побочных эффектов в вашем редукторе (чистая функция).

Заключение

Вот и все. Предполагая, что вы объединяете свой магазин Redux в локальное хранилище, вы можете избежать кучи ненужных запросов API. Если у вас есть лучший шаблон (или вы знаете библиотеку, которая решает эту проблему более элегантно), оставьте мне комментарий.

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

Похожие сообщения