TanStack Query ориентирован на современный JavaScript и активно использует возможности стандарта ES2015+:
Promiseasync/awaitMapSetМинимальные требования зависят от используемого окружения и сборщика, однако на практике чаще всего применяются:
При использовании старых браузеров требуется подключение полифиллов:
import 'core-js/stable';
import 'regenerator-runtime/runtime';
Без поддержки Promise библиотека работать не сможет,
поскольку вся её архитектура построена вокруг асинхронных запросов.
Для современных версий TanStack Query рекомендуется использовать актуальные LTS-версии Node.js.
Наиболее распространённые варианты:
| Версия Node.js | Статус |
|---|---|
| 18.x | Рекомендуется |
| 20.x | Полная поддержка |
| 22.x | Поддерживается |
Проверка установленной версии:
node -v
Проверка npm:
npm -v
Проверка pnpm:
pnpm -v
Проверка yarn:
yarn -v
TanStack Query не зависит от конкретного пакетного менеджера и корректно работает с:
Примеры установки:
npm install @tanstack/react-query
yarn add @tanstack/react-query
pnpm add @tanstack/react-query
bun add @tanstack/react-query
TanStack Query является частью экосистемы TanStack и поддерживает несколько UI-фреймворков.
Наиболее популярный вариант:
npm install @tanstack/react-query
npm install @tanstack/vue-query
npm install @tanstack/solid-query
npm install @tanstack/svelte-query
Для Angular существуют адаптеры и интеграции сообщества.
Для React-проекта чаще всего используются:
| Библиотека | Рекомендуемая версия |
|---|---|
| React | 18+ |
| React DOM | 18+ |
Проверка версии:
npm list react
или:
yarn why react
TanStack Query активно использует возможности современных React API:
Старые версии React могут работать нестабильно или требовать дополнительных настроек.
Хотя библиотека полностью работоспособна на обычном JavaScript, её архитектура изначально создавалась с учётом TypeScript.
Рекомендуемые версии:
| Инструмент | Версия |
|---|---|
| TypeScript | 5+ |
Установка:
npm install typescript --save-dev
TanStack Query предоставляет:
Пример конфигурации TypeScript:
{
"compilerOptions": {
"target": "ES2020",
"module": "ESNext",
"strict": true,
"moduleResolution": "Node",
"jsx": "react-jsx"
}
}
TanStack Query совместим практически со всеми современными сборщиками.
Наиболее рекомендуемый вариант.
Преимущества:
Создание проекта:
npm create vite@latest
Полностью поддерживается:
npm install webpack webpack-cli webpack-dev-server
Для старых конфигураций Webpack может потребоваться:
Работает без дополнительной настройки:
npm install parcel
Часто используется для библиотек:
npm install rollup
TanStack Query отлично интегрируется с:
Установка:
npm install next react react-dom
Дополнительно часто используется:
npm install @tanstack/react-query-devtools
Минимальные требования определяются поддержкой современных API.
| Браузер | Версия |
|---|---|
| Chrome | последние версии |
| Firefox | последние версии |
| Edge | последние версии |
| Safari | последние версии |
| Браузер | Особенности |
|---|---|
| Internet Explorer | не поддерживается |
| Старые Android WebView | требуются полифиллы |
TanStack Query не выполняет HTTP-запросы самостоятельно. Библиотека лишь управляет состоянием запросов.
Поэтому требуется отдельный HTTP-клиент.
Наиболее распространённые варианты:
const response = await fetch('/api/users');
const data = await response.json();
npm install axios
Пример:
import axios from 'axios';
const { data } = await axios.get('/api/users');
Поддерживаются:
TanStack Query строится вокруг React Hooks.
Необходимо соблюдение правил хуков:
Неправильно:
if (isAdmin) {
useQuery(...);
}
Правильно:
const query = useQuery({
queryKey: ['users'],
queryFn: fetchUsers,
enabled: isAdmin
});
Типичная структура проекта:
src/
├── api/
├── hooks/
├── queries/
├── mutations/
├── services/
├── pages/
├── components/
└── providers/
Часто отдельно выносятся:
TanStack Query требует обязательного создания экземпляра
QueryClient.
Минимальная конфигурация:
import { QueryClient } from '@tanstack/react-query';
export const queryClient = new QueryClient();
Без него библиотека функционировать не сможет.
Все React-компоненты, использующие TanStack Query, должны находиться
внутри QueryClientProvider.
Пример:
import React from 'react';
import ReactDOM from 'react-dom/client';
import {
QueryClient,
QueryClientProvider
} from '@tanstack/react-query';
const queryClient = new QueryClient();
ReactDOM.createRoot(document.getElementById('root')).render(
<QueryClientProvider client={queryClient}>
<App />
</QueryClientProvider>
);
Для разработки рекомендуется подключение Devtools.
Установка:
npm install @tanstack/react-query-devtools
Подключение:
import { ReactQueryDevtools } from '@tanstack/react-query-devtools';
<ReactQueryDevtools initialIsOpen={false} />
Devtools позволяют:
При SSR требуется:
Для Next.js используется:
npm install @tanstack/react-query
и API:
dehydrate()
hydrate()
HydrationBoundary
Для предотвращения ошибок рекомендуется использование:
npm install eslint eslint-plugin-react-hooks
Основные правила:
react-hooks/rules-of-hooksreact-hooks/exhaustive-depsОни помогают избежать:
TanStack Query активно использует:
Для корректной работы рекомендуется:
Плохо:
useQuery({
queryKey: [{ page: 1 }]
});
Лучше:
useQuery({
queryKey: ['users', 1]
});
Наиболее эффективно TanStack Query работает при:
Желательно наличие:
Все query functions должны возвращать Promise.
Правильно:
const fetchUsers = async () => {
const response = await fetch('/api/users');
if (!response.ok) {
throw new Error('Request failed');
}
return response.json();
};
Неправильно:
const fetchUsers = () => {
fetch('/api/users');
};
Функции запросов должны выбрасывать ошибки, а не скрывать их.
Неправильно:
const fetchUsers = async () => {
try {
const response = await fetch('/api/users');
return await response.json();
} catch {
return [];
}
};
Правильно:
const fetchUsers = async () => {
const response = await fetch('/api/users');
if (!response.ok) {
throw new Error('Failed request');
}
return response.json();
};
Ключи запросов должны быть:
Рекомендуется использовать массивы:
['users']
['users', userId]
['users', userId, filters]
Нежелательно использовать:
TanStack Query хранит данные в памяти приложения.
При больших объёмах данных важно учитывать:
cacheTimegcTimeПример:
const queryClient = new QueryClient({
defaultOptions: {
queries: {
gcTime: 1000 * 60 * 10
}
}
});
TanStack Query не выполняет автоматическую защиту данных.
Безопасность должна обеспечиваться отдельно:
Библиотека лишь управляет состоянием клиентских запросов и не заменяет backend-механизмы безопасности.