0Pricing
React Academy · Урок

Хук useSWR: загрузка, состояние загрузки и ошибки

Используйте useSWR с пользовательскими функциями загрузки и декларативно обрабатывайте состояния загрузки, ошибки и успеха

«Хук useSWR: загрузка, состояние загрузки и ошибки» — бесплатный урок React Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения React Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс React Academy содержит 4 уроков всего.

Сигнатура useSWR

useSWR(key, fetcher, options) — основной хук. key — это ключ кэша (обычно строка URL), fetcher — асинхронная функция, возвращающая данные, а options — необязательный объект конфигурации.

Хук возвращает объект с полями data, error, isLoading, isValidating и функцией mutate.

Параметр ключа

Ключом может быть строка URL, массив [url, params] или null. Строковые ключи соответствуют простым GET-запросам. Ключи-массивы позволяют включать такие переменные, как userId или фильтры, в идентификатор кэша.

Передача null полностью отключает запрос; это удобно для условного получения данных, когда необходимые данные ещё недоступны.

Функция получения данных

Функция получения данных получает ключ (или элементы ключа-массива в виде отдельных аргументов) и должна возвращать Promise. Полученное значение становится значением data. Если функция получения данных выдаёт исключение, устанавливается свойство error.

Пример: (url) => fetch(url).then(r => { if (!r.ok) throw new Error(r.status); return r.json(); }).

Состояния data и error

При первой загрузке data имеет значение undefined, а после успешного выполнения содержит значение, возвращённое функцией получения данных. error имеет значение undefined, если функция получения данных не выдала исключение; в противном случае в нём хранится объект выданной ошибки.

Проверяйте if (error), чтобы отобразить сообщение об ошибке, и if (!data), чтобы показать каркас загрузки и предоставить понятные резервные интерфейсы.

isLoading и isValidating

isLoading имеет значение true только при отсутствии кэшированных данных и выполняющемся запросе — во время самой первой загрузки этого ключа. isValidating имеет значение true каждый раз, когда выполняется запрос, включая фоновые ревалидации при наличии кэшированных данных.

Используйте isLoading для экранов загрузки, а isValidating — для ненавязчивого индикатора фонового обновления.

Глобальный SWRConfig

SWRConfig позволяет задать функцию получения данных по умолчанию, dedupingInterval, refreshInterval, обработчик onError и другие параметры для всех вызовов useSWR внутри своего поддерева. Это централизует конфигурацию и избавляет от повторения параметров в каждом хуке.

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

Условное получение данных с нулевым ключом

Передайте null в качестве ключа, чтобы пропустить запрос: useSWR(isLoggedIn ? '/api/user' : null, fetcher). SWR не будет выполнять запрос, пока ключ не станет ненулевым значением.

Это понятнее, чем параметр skip в React Query. Переход ключа от null к строке автоматически запускает первый запрос.

Зависимое получение данных

Объединяйте хуки SWR для зависимых запросов: const { data: user } = useSWR('/api/me', fetcher) затем const { data: orders } = useSWR(user ? '/api/orders/' + user.id : null, fetcher). Второй хук ожидает завершения первого.

Этот подход избавляет от цепочек useEffect и сохраняет зависимости данных декларативными и понятными.

Устранение дубликатов запросов на практике

Если компоненты Header и Sidebar оба вызывают useSWR('/api/user', fetcher), SWR выполняет только один запрос и передаёт его результат обоим компонентам. Оба компонента перерисовываются одновременно при обновлении data или error.

Это устранение дубликатов происходит автоматически в течение окна dedupingInterval (по умолчанию 2000 мс), без дополнительной настройки.

Полезные параметры SWR

refreshInterval: 5000 выполняет опрос каждые 5 секунд. refreshWhenHidden: false прекращает опрос, когда вкладка невидима. shouldRetryOnError: false отключает автоматический повтор. revalidateOnFocus: false отключает ревалидацию при возвращении фокуса.

Комбинируйте параметры в соответствии с требованиями к актуальности данных: в панелях мониторинга часто используют refreshInterval, а для статического содержимого задают revalidateOnFocus: false.

Постраничная загрузка с useSWR

Для постраничных данных включите номер страницы в ключ: useSWR(['/api/items', page], fetcher). При смене страницы запускается новый запрос для этой страницы, а предыдущие страницы кэшируются.

SWR также предоставляет useSWRInfinite для сценариев с курсорами или бесконечной прокруткой, используя функцию getKey, которая формирует ключи на основе индекса страницы и данных предыдущей страницы.

Ключ SWR равен null

Что происходит, если передать null в качестве ключа для useSWR?

Итоги урока

useSWR(key, fetcher) возвращает data, error, isLoading и isValidating. Ключи null отключают получение данных для условных и зависимых запросов. isLoading обозначает первую загрузку, а isValidating — любой выполняющийся запрос. SWRConfig централизует значения по умолчанию, а устранение дубликатов запросов между компонентами происходит автоматически.

Такие параметры, как refreshInterval, revalidateOnFocus и shouldRetryOnError, позволяют настраивать поведение, связанное с актуальностью данных, для отдельного хука или глобально.

Часто задаваемые вопросы

Урок «Хук useSWR: загрузка, состояние загрузки и ошибки» бесплатный?

Да — полный текст урока «Хук useSWR: загрузка, состояние загрузки и ошибки» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс React Academy, подпишись на CoddyKit PRO. Курс React Academy содержит 4 уроков всего.

Чему я научусь в уроке «Хук useSWR: загрузка, состояние загрузки и ошибки»?

Используйте useSWR с пользовательскими функциями загрузки и декларативно обрабатывайте состояния загрузки, ошибки и успеха Ты практикуешь React Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать React Academy?

Предыдущий опыт не требуется. React Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Хук useSWR: загрузка, состояние загрузки и ошибки»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке React Academy?

Да. Каждый урок React Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Основные понятия SWR: устаревшие данные с обновлением
  2. Хук useSWR: загрузка, состояние загрузки и ошибки
  3. Мутации и оптимистичные обновления с SWR
  4. SWR и React Query: выбор подходящего инструмента
← Назад к React Academy