intermediate

TanStack Query

Осознанно используйте query keys, stale time, cache time, mutations, инвалидацию, retries и optimistic updates.

TanStack Query (React Query) кэширует async-состояние по query keys. `useQuery` загружает и отслеживает статус; `useMutation` пишет с optional optimistic updates и инвалидацией.

					const { data, isLoading, error } = useQuery({
  queryKey: ['todos', filter],
  queryFn: () => fetchTodos(filter),
  staleTime: 60_000,
});

const mutation = useMutation({
  mutationFn: addTodo,
  onSuccess: () => queryClient.invalidateQueries({ queryKey: ['todos'] }),
});
				

| Опция | Роль | |-------|------| | queryKey | Идентичность кэша — включайте все переменные | | staleTime | Как долго данные «свежие» без refetch | | gcTime | Сколько живёт неиспользуемый кэш | | enabled | Не fetch, пока условие false |

Prefetch на hover, параллельные запросы через `useQueries`, общий `QueryClient` для SSR dehydration.

Компромисс: мощная оркестрация кэша против дисциплины проектирования ключей и устаревшего UI при игноре дефолтов.

На интервью: дизайн ключей, stale vs garbage collection, поток mutation + инвалидация.

Типовые ошибки: нестабильные query keys (inline objects), staleTime 0 и шторм refetch, mutations без плана optimistic rollback.

Чеклист:

  • Стабильные иерархические query keys.
  • staleTime под тип данных.
  • invalidateQueries или setQueryData после записей.
  • Осторожный dehydrate/hydrate для SSR.