К основному содержанию
правило

tanstack-query — правило для Cursor: что делает и как установить

Правило задаёт для Cursor шаблоны работы с TanStack Query v5 в TypeScript и React. Оно пригодится при запросах, мутациях, пагинации и Suspense.

Установить в Cursor · Вручную: положить файлы Все способы и платформы ↓
.cursor/rules/tanstack-query.mdc
Открыть на GitHub

Что делает tanstack-query

Правило подсказывает Cursor, как организовать серверное состояние через TanStack Query v5. Оно охватывает стабильные ключи запросов, фабрики ключей, queryOptions(), мутации с инвалидированием кеша, оптимистичные обновления и бесконечные запросы.

Отдельные рекомендации относятся к useSuspenseQuery, предварительной загрузке данных и пагинации через placeholderData: keepPreviousData. Правило применяется к файлам src/**/*.tsx, src/**/*.ts и src/queries/**/*, а alwaysApply задан как false.

В v5 useQuery принимает объект опций, поэтому старый позиционный вызов здесь не подойдёт. QueryClient советуется создавать один раз в корне приложения, а не внутри компонента.

Какие задачи решает

  • разложить ключи запросов по фабрике
  • описать запрос через queryOptions()
  • обновить кеш после мутации
  • добавить откат оптимистичного изменения
  • собрать бесконечную пагинацию

Примеры запросов агенту

  • Настрой запросы постов по правилам TanStack Query v5 и вынеси ключи в фабрику.
  • Перепиши этот useQuery на объектный синтаксис v5 через queryOptions().
  • Добавь для обновления поста оптимистичное изменение кеша и откат при ошибке.

Как установить tanstack-query

Вручную: положить файлы

.cursor/rules/tanstack-query.mdc

Во frontmatter: description, globs, alwaysApply

По шагам, с командами для каждой платформы: Cursor rules: файлы .mdc, четыре режима и замена .cursorrules

Вопросы о tanstack-query

Как установить tanstack-query в Cursor?

Создайте файл правила по пути .cursor/rules/tanstack-query.mdc.

Что делает правило tanstack-query?

Оно задаёт Cursor паттерны TanStack Query v5 для запросов, мутаций, кеша, оптимистичных обновлений, бесконечных запросов и Suspense.

К каким файлам применяется tanstack-query?

Правило рассчитано на src/**/*.tsx, src/**/*.ts и src/queries/**/*. Оно не применяется всегда автоматически, потому что alwaysApply имеет значение false.

Исходный текст

tanstack-query.mdc · CC0-1.0
---
description: "TanStack Query v5 (React Query) patterns including queryOptions helper, query key factories, mutations, optimistic updates, infinite queries, Suspense mode, and prefetching"
globs: ["src/**/*.tsx", "src/**/*.ts", "src/queries/**/*"]
alwaysApply: false
---
You are an expert in TanStack Query v5 (React Query), TypeScript, and async state management.

## Core Principles
- TanStack Query manages server state — NOT a general client state manager
- Every query needs a stable, serializable query key that uniquely describes the data
- Mutations handle writes; queries handle reads — never blur this boundary
- Use `queryOptions()` helper (v5) for reusable, co-located query definitions
- v5 breaking change: `useQuery` only accepts options object form — no positional args

## QueryClient Setup
```tsx
const queryClient = new QueryClient({
  defaultOptions: {
    queries: {
      staleTime: 1000 * 60,
      retry: (count, error: any) => error?.status !== 404 && count < 2,
    },
  },
})
```

## Query Key Factory Pattern
```ts
export const postKeys = {
  all: ['posts'] as const,
  lists: () => [...postKeys.all, 'list'] as const,
  list: (filters?: PostFilters) => [...postKeys.lists(), filters] as const,
  details: () => [...postKeys.all, 'detail'] as const,
  detail: (id: string) => [...postKeys.details(), id] as const,
}
```

## queryOptions Helper (v5)
```ts
export const postQueryOptions = (id: string) =>
  queryOptions({
    queryKey: postKeys.detail(id),
    queryFn: () => fetchPost(id),
    staleTime: 1000 * 60 * 5,
  })

// In component
const { data } = useQuery(postQueryOptions(postId))

// In router loader
loader: ({ params, context: { queryClient } }) =>
  queryClient.ensureQueryData(postQueryOptions(params.postId))
```

## Mutations
```tsx
const { mutate, isPending } = useMutation({
  mutationFn: (input: CreatePostInput) => createPost(input),
  onSuccess: () => {
    queryClient.invalidateQueries({ queryKey: postKeys.lists() })
  },
  onError: (error) => toast.error(error.message),
})
```

## Optimistic Updates
```tsx
const mutation = useMutation({
  mutationFn: updatePost,
  onMutate: async (updated) => {
    await queryClient.cancelQueries({ queryKey: postKeys.detail(updated.id) })
    const previous = queryClient.getQueryData(postKeys.detail(updated.id))
    queryClient.setQueryData(postKeys.detail(updated.id), updated)
    return { previous }
  },
  onError: (_, updated, ctx) => {
    queryClient.setQueryData(postKeys.detail(updated.id), ctx?.previous)
  },
  onSettled: (_, __, updated) => {
    queryClient.invalidateQueries({ queryKey: postKeys.detail(updated.id) })
  },
})
```

## Infinite Queries
```tsx
const { data, fetchNextPage, hasNextPage } = useInfiniteQuery({
  queryKey: postKeys.lists(),
  queryFn: ({ pageParam }) => fetchPosts({ cursor: pageParam }),
  initialPageParam: undefined as string | undefined,
  getNextPageParam: (lastPage) => lastPage.nextCursor,
})
const allPosts = data?.pages.flatMap((p) => p.items) ?? []
```

## Suspense Mode (v5)
```tsx
// useSuspenseQuery — no isLoading needed, Suspense handles it
const { data } = useSuspenseQuery(postQueryOptions(postId))
// Wrap with <Suspense fallback={<Skeleton />}> + <ErrorBoundary>
```

## Key Rules
- Always define `queryOptions` outside components — never inline in `useQuery()`
- Never use `useEffect` to fetch data — use loaders or `useQuery`
- Use `placeholderData: keepPreviousData` for pagination to avoid layout shifts
- Instantiate `QueryClient` once at app root — never inside a component

© PatrickJS · CC0-1.0 · PatrickJS/awesome-cursorrules

Похожие правила IDE

Все правила IDE по теме «Фронтенд и UI» →
winui3 официальный github Правило задаёт рекомендации для WinUI 3 и Windows App SDK: от XAML и потоков до окон и MVVM. Пригодится, чтобы Copilot учитывал особенности настольных приложений Windows. ★ 40 451звёзд репо vue официальный github Правило задаёт Copilot стандарты Vue 3: Composition API, <script setup>, реактивность, Pinia и Vue Router. Пригодится, когда агент пишет компоненты в вашем стиле. ★ 40 451звёзд репо tanstack-start-shadcn-tailwind официальный github Правило задаёт Copilot стек TanStack Start, Shadcn/ui и Tailwind CSS и требует валидировать внешние данные через Zod. ★ 40 451звёзд репо tailwind-v4-vite официальный github Правило помогает подключить Tailwind CSS v4 к проекту на Vite через официальный плагин. Пригодится и для новой установки, и при переходе с v3. ★ 40 451звёзд репо svelte официальный github Направляет GitHub Copilot на стандарты Svelte 5 и SvelteKit 2: руны вместо старых сторов, типизация компонентов и безопасная работа с SSR. ★ 40 451звёзд репо power-bi-custom-visuals-development официальный github Правило для GitHub Copilot, которое подсказывает агенту, как писать кастомные визуалы Power BI на React, D3.js и TypeScript. ★ 40 451звёзд репо

Из того же набора210

tensorflow-deep-learning Правило задаёт рекомендации для работы с TensorFlow: от подготовки данных и обучения до оценки и экспорта модели. Пригодится, если хотите, чтобы Cursor учитывал эти практики в Python-файлах и ноутбуках. ★ 41 024звёзд репо tauri-svelte-typescript-guide-cursorrules-prompt-f Правило для Cursor, которое задаёт агенту стиль работы с десктопными приложениями на Tauri: Svelte во фронтенде, TypeScript для типов. ★ 41 024звёзд репо tanstack-start-cursorrules-prompt-file Правило задаёт Cursor ориентиры для разработки на TanStack Start: от серверных функций и маршрутов до потоковой загрузки и SSR. ★ 41 024звёзд репо tanstack-router Правило для Cursor, которое задаёт агенту стандарты TanStack Router v1: файловые маршруты, типизация параметров и загрузка данных через loader. ★ 41 024звёзд репо tanstack-query-v5-cursorrules-prompt-file Правило для Cursor, которое задаёт агенту стиль работы с TanStack Query v5: ключи запросов, мутации, оптимистичные обновления, Suspense и префетчинг. ★ 41 024звёзд репо tailwind-shadcn-ui-integration-cursorrules-prompt- Правило задаёт стиль работы Cursor с Tailwind и shadcn/ui: просит сначала расписать план, а затем писать читаемый код на TypeScript и Next.js. ★ 41 024звёзд репо tailwind-react-firebase-cursorrules-prompt-file Правило для Cursor задаёт, как писать мобильное веб-приложение на Tailwind, React и Firebase: сначала мобильная вёрстка, потом остальное. ★ 41 024звёзд репо swiftui-guidelines-cursorrules-prompt-file Правило задаёт рекомендации для SwiftUI-кода: от архитектуры и конкурентности до тестов и превью. Подключите его, чтобы Cursor учитывал эти требования при работе с проектом. ★ 41 024звёзд репо

Спонсоры проекта

Компании, которые помогают держать аналитику открытой