PassFront
  1. PassFront
  2. База знаний
  3. API и асинхронность

Что такое React Query?

API и асинхронность

React Query (TanStack Query) — библиотека управления серверным состоянием: запросы, кеширование, синхронизация и обновление данных с сервера.

Главная идея

Данные с сервера — это не state, а кеш: у них есть свежесть, фоновая инвалидация, повторные запросы. Вручную это выливается в бесконечные useEffect + isLoading + error и дублирование запросов. React Query упаковывает всё в один хук:

const { data, isPending, error } = useQuery({
  queryKey: ['user', userId],
  queryFn: () => api.getUser(userId),
});

Что даёт из коробки

  • Кеш по ключам: два компонента с одинаковым queryKey делят один запрос и данные.
  • Свежесть: staleTime/gcTime; устаревшие данные показываются мгновенно и обновляются в фоне (stale-while-revalidate).
  • Автообновление: при фокусе окна, реконнекте, интервалом.
  • Ретраи с экспоненциальной задержкой.
  • Мутации с инвалидацией и оптимистичными обновлениями:
const mutation = useMutation({
  mutationFn: api.updateUser,
  onSuccess: () => queryClient.invalidateQueries({ queryKey: ['user'] }),
});
  • Пагинация, инфинит-скролл, префетч, девтулзы.

Что меняет в архитектуре

Серверные данные уходят из Redux/контекста — глобальный стор остаётся только для клиентского состояния (UI-флаги, корзина), и часто оказывается, что стейт-менеджер больше не нужен.

Нюансы

  • Это не HTTP-клиент: сами запросы пишете вы (fetch/axios), библиотека управляет их жизненным циклом.
  • Аналоги: SWR, Apollo Client (для GraphQL), RTK Query.

Коротко для собеседования

React Query управляет серверными данными как кешем: useQuery с ключом даёт данные, статусы, дедупликацию, фоновое обновление и ретраи; useMutation — изменения с инвалидацией кеша и оптимистичными апдейтами. Убирает ручные эффекты загрузки и выносит серверное состояние из стейт-менеджера.

Другие вопросы раздела