0Pricing
React Academy · Урок

Кэширование, время устаревания и фоновые запросы

Настройте staleTime и gcTime, чтобы управлять повторным получением данных с сервера.

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

Добро пожаловать

В этом уроке Вы настроите staleTime и gcTime, чтобы управлять тем, как долго React Query хранит данные актуальными и как долго сохраняет кэшированные данные в памяти.

Свежие и устаревшие данные

React Query отслеживает, являются ли кэшированные данные «свежими» или «устаревшими». Свежие данные возвращаются сразу без сетевого запроса. Устаревшие данные также возвращаются сразу, но для их обновления запускается фоновая повторная загрузка.

staleTime

staleTime определяет, как долго данные (в миллисекундах) остаются свежими. Значение по умолчанию — 0 (данные сразу считаются устаревшими). Если установить 60000, данные, полученные за последнюю минуту, будут возвращаться без фоновой повторной загрузки.
useQuery({
  queryKey: ['users'],
  queryFn: fetchUsers,
  staleTime: 60_000, // fresh for 60 seconds
})

Настройка staleTime для статических данных

Для данных, которые редко меняются (например, списка стран или параметров конфигурации), установите большое значение staleTime. Для актуальных данных (например, цен акций) оставьте значение 0 по умолчанию и включите периодический опрос.
// Effectively never stale — reload only on explicit invalidation
useQuery({ queryKey: ['countries'], queryFn: fetchCountries,
  staleTime: Infinity })

gcTime (сборка мусора)

gcTime (ранее cacheTime) определяет, как долго НЕИСПОЛЬЗУЕМЫЕ кэшированные данные остаются в памяти до удаления сборщиком мусора. Значение по умолчанию — 5 минут. Даже после истечения gcTime React Query может сразу повторно загрузить данные, если появится новый подписчик.
useQuery({
  queryKey: ['products'],
  queryFn: fetchProducts,
  gcTime: 10 * 60 * 1000, // keep in memory for 10 minutes
})

staleTime и gcTime

staleTime управляет тем, КОГДА выполнять повторную загрузку (актуальностью данных). gcTime управляет тем, КОГДА удалять кэшированные данные из памяти. Обычно staleTime <= gcTime.

Индикаторы фоновой повторной загрузки

Когда React Query повторно загружает данные в фоновом режиме, `isFetching` имеет значение true, хотя `isLoading` имеет значение false (данные уже кэшированы). Используйте isFetching, чтобы показать ненавязчивый индикатор загрузки.
const { data, isLoading, isFetching } = useQuery({ /* ... */ });

return (
  <>
    {isLoading ? <Spinner /> : <DataView data={data} />}
    {isFetching && !isLoading && <RefreshIndicator />}
  </>
);

refetchOnWindowFocus

По умолчанию React Query повторно загружает устаревшие запросы, когда пользователь возвращается на вкладку. Отключите это для данных, которые обновляются редко.
useQuery({
  queryKey: ['settings'],
  queryFn: fetchSettings,
  refetchOnWindowFocus: false,
})

refetchInterval для периодического опроса

Установите `refetchInterval`, чтобы автоматически выполнять запрос через заданные промежутки времени. Это полезно для панелей мониторинга с актуальными данными.
useQuery({
  queryKey: ['liveStats'],
  queryFn: fetchStats,
  refetchInterval: 5000, // every 5 seconds
})

Данные-заполнитель

Используйте `placeholderData`, чтобы показывать предыдущие данные во время повторной загрузки и предотвращать скачки макета. Параметр keepPreviousData упрощает это при постраничной навигации.
import { keepPreviousData } from '@tanstack/react-query';

useQuery({
  queryKey: ['posts', page],
  queryFn: () => fetchPage(page),
  placeholderData: keepPreviousData,
})

Быстрая проверка

Чего позволяет добиться установка staleTime: Infinity для запроса?

Повторение

staleTime управляет актуальностью — временем до того, как данные вызовут фоновую повторную загрузку. gcTime управляет памятью — временем хранения неиспользуемых данных в кэше. isFetching сигнализирует о фоновой повторной загрузке. Используйте placeholderData для плавной постраничной навигации.

Далее

Следующий урок: **мутации с useMutation** — Вы отправите данные в API и сделаете запросы недействительными после успешного выполнения.

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

Урок «Кэширование, время устаревания и фоновые запросы» бесплатный?

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

Чему я научусь в уроке «Кэширование, время устаревания и фоновые запросы»?

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

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

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

Сколько времени занимает урок «Кэширование, время устаревания и фоновые запросы»?

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

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

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

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

  1. Настройка React Query и QueryClient
  2. Кэширование, время устаревания и фоновые запросы
  3. Мутации с useMutation
  4. Бесконечная прокрутка и разбиение на страницы с useInfiniteQuery
← Назад к React Academy