0Pricing
React Academy · Урок

Настройка React Query и QueryClient

Установите TanStack Query, оберните приложение в QueryClientProvider и выполните свой первый useQuery.

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

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

В этом уроке Вы установите TanStack Query, настроите QueryClient и QueryClientProvider и выполните свой первый useQuery для получения данных из API.

Что такое React Query?

TanStack Query (ранее React Query) управляет состоянием сервера: получает, кэширует, синхронизирует и обновляет данные из удалённых источников. Он заменяет ручное управление состояниями загрузки и ошибок, а также получение данных на основе useEffect.

Установка

Установите основной пакет и, при необходимости, DevTools.
npm install @tanstack/react-query
npm install @tanstack/react-query-devtools --save-dev

Создание QueryClient

Создайте экземпляр QueryClient для хранения всего кэша и конфигурации. Передайте его в QueryClientProvider, который оборачивает приложение.
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';

const queryClient = new QueryClient();

createRoot(document.getElementById('root')).render(
  <QueryClientProvider client={queryClient}>
    <App />
  </QueryClientProvider>
);

Ваш первый useQuery

Вызовите useQuery с массивом queryKey и queryFn, возвращающей данные. Ключ однозначно идентифицирует запись в кэше.
import { useQuery } from '@tanstack/react-query';

function Posts() {
  const { data, isLoading, isError } = useQuery({
    queryKey: ['posts'],
    queryFn: () => fetch('/api/posts').then(r => r.json()),
  });

  if (isLoading) return <p>Loading...</p>;
  if (isError) return <p>Error!</p>;
  return <ul>{data.map(p => <li key={p.id}>{p.title}</li>)}</ul>;
}

Ключи запросов

Ключи запросов — это массивы. Добавляйте параметры в ключ, чтобы задать область действия записи в кэше. Разные ключи означают разные записи в кэше.
// All posts
useQuery({ queryKey: ['posts'], queryFn: fetchPosts })

// Post with id 5
useQuery({ queryKey: ['posts', 5], queryFn: () => fetchPost(5) })

// Posts filtered by category
useQuery({ queryKey: ['posts', { category: 'react' }], queryFn: /* ... */ })

Состояние запроса

useQuery возвращает несколько свойств состояния: `isLoading`, `isFetching`, `isError`, `isSuccess`, `data` и `error`. `isFetching` имеет значение true даже при фоновой повторной загрузке, а `isLoading` имеет значение true только при первой загрузке.

Инструменты разработчика React Query

Добавьте ReactQueryDevtools в приложение в режиме разработки, чтобы видеть все записи кэша, их состояние и время последнего получения данных. Это незаменимый инструмент для поиска ошибок.
import { ReactQueryDevtools } from '@tanstack/react-query-devtools';

<QueryClientProvider client={queryClient}>
  <App />
  <ReactQueryDevtools initialIsOpen={false} />
</QueryClientProvider>

Конфигурация по умолчанию

Настройте глобальные значения по умолчанию в QueryClient: staleTime, gcTime (сборку мусора), число повторных попыток и refetchOnWindowFocus.
const queryClient = new QueryClient({
  defaultOptions: {
    queries: {
      staleTime: 60_000,     // data is fresh for 60s
      retry: 2,              // retry failed queries twice
      refetchOnWindowFocus: false,
    },
  },
});

Автоматическая повторная загрузка

По умолчанию React Query повторно загружает устаревшие данные, когда окно снова получает фокус, компонент монтируется заново или восстанавливается сетевое подключение. Эти параметры можно настроить отдельно для каждого запроса.

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

Для чего нужен массив queryKey в useQuery?

Повторение

Установите @tanstack/react-query, создайте QueryClient, оберните приложение в QueryClientProvider и вызовите useQuery с queryKey и queryFn. Добавьте DevTools для наблюдения за состоянием. Настройте глобальные параметры по умолчанию в QueryClient.

Далее

Следующий урок: **кэширование, время актуальности и фоновая повторная загрузка** — Вы настроите staleTime и gcTime, чтобы управлять повторным получением данных.

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

Урок «Настройка React Query и QueryClient» бесплатный?

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

Чему я научусь в уроке «Настройка React Query и QueryClient»?

Установите TanStack Query, оберните приложение в QueryClientProvider и выполните свой первый useQuery. Ты практикуешь React Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

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

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

Сколько времени занимает урок «Настройка React Query и QueryClient»?

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

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

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

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

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