Избегайте дублирования вызовов для получения стабильных данных
В настоящее время я экспериментирую с Contentful как с услугой для предоставления данных, которые можно редактировать и обновлять, не вызывая совершенно новый цикл тестирования / развертывания. Поскольку я объединяю свой магазин Redux в локальное хранилище, я пытаюсь выяснить схему, в которой я не запрашиваю эти данные повторно чаще, чем каждые [x], где [x] может быть ограничением по времени от миллисекунд. к дням.
В этом примере я использую Redux-Thunk, чтобы позволить мне выполнять асинхронные действия.
Действия
Первая часть - это действия, разрешенные в моем редьюсере.
- Прервать: действие, которое мы запускаем, если кеш «свежий».
- Ошибка: сохраните ошибку для любого необходимого использования (это действие может быть ловушкой для подключения внешнего ведения журнала).
- Старт: установите
isFetching
вtrue
для любого вида уведомления пользователя об асинхронном процессе. - Обновить: установите возвращаемые данные в качестве значения.
Создатели синхронных действий
Создатели действий - это функции, которые будут отправляться в течение жизненного цикла асинхронного действия.
Создатель асинхронных действий
Это функция, которая будет экспортирована в компонент и вызвана из ловушки жизненного цикла везде, где необходимо инициировать выборку. Внутренние действия будут отправляться последовательно в течение жизненного цикла асинхронного вызова.
Редуктор и InitialState
Редуктор обрабатывает все синхронные действия, отправленные в течение жизненного цикла асинхронной функции, а также обрабатывает установку значений isFetching
и lastFetched
. Вы можете легко передать эту логику создателям действий и избежать каких-либо побочных эффектов в вашем редукторе (чистая функция).
Заключение
Вот и все. Предполагая, что вы объединяете свой магазин Redux в локальное хранилище, вы можете избежать кучи ненужных запросов API. Если у вас есть лучший шаблон (или вы знаете библиотеку, которая решает эту проблему более элегантно), оставьте мне комментарий.
Я точно знаю, что между сутью есть пара опечаток, но они не заслоняют логику.