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

tanstack-router — правило для Cursor: типизированный роутинг в React

Правило для Cursor, которое задаёт агенту стандарты TanStack Router v1: файловые маршруты, типизация параметров и загрузка данных через loader.

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

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

Правило описывает, как писать клиентский роутинг на TanStack Router v1 в React-проекте. Агент получает набор принципов: маршруты объявляются через createFileRoute или createRootRoute, данные грузятся в loader, а не в useEffect, поисковые параметры описываются схемой Zod через validateSearch. Для навигации — только <Link>, без <a href>.

Внутри есть готовые шаблоны: структура папки src/routes с динамическими сегментами вида $postId и группами без пути, примеры типизированного доступа к данным через Route.useLoaderData() и Route.useParams(), связка с TanStack Query через queryClient.ensureQueryData. Отдельно разобраны auth-гарды в beforeLoad с редиректом и внедрение зависимостей через контекст роутера.

Правило подключается по globs — src/routes/**/*, src/routeTree.gen.ts, app.config.ts, — поэтому срабатывает только на файлах маршрутов, а не на всём проекте. Учитывайте: шаблоны рассчитаны на файловый роутинг с @tanstack/router-vite-plugin, так что в проекте с ручным деревом маршрутов часть примеров придётся переписывать под себя.

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

  • объявить типизированный маршрут с динамическим сегментом
  • описать поисковые параметры схемой Zod и не читать window.location.search
  • перенести загрузку данных из useEffect в loader
  • закрыть раздел за auth-гардом с редиректом на логин
  • связать роутер с TanStack Query через контекст

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

  • добавь маршрут /posts/$postId с loader и компонентом
  • сделай типизированные поисковые параметры для страницы поиска
  • поставь auth-гард на /_auth/dashboard

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

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

.cursor/rules/tanstack-router.mdc

Во frontmatter: description, globs, alwaysApply

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

Вопросы о tanstack-router

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

Создайте файл .cursor/rules/tanstack-router.mdc в корне проекта и вставьте в него содержимое правила. Cursor подхватит его автоматически и будет применять к файлам, подходящим под globs.

Что делает это правило?

Задаёт агенту стандарты TanStack Router v1: файловый роутинг, типизация параметров и loader-данных, валидация поисковых параметров через Zod, auth-гарды и интеграция с TanStack Query.

Когда правило применяется?

Оно привязано к globs src/routes/**/*, src/routeTree.gen.ts и app.config.ts, поэтому срабатывает при работе с файлами маршрутов, а не со всем кодом проекта.

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

tanstack-router.mdc · CC0-1.0
---
description: "Type-safe routing with TanStack Router v1 for React apps, including file-based routing, loaders, search params validation, auth guards, and TanStack Query integration"
globs: ["src/routes/**/*", "src/routeTree.gen.ts", "app.config.ts"]
alwaysApply: false
---
You are an expert in TanStack Router v1, React, TypeScript, and type-safe client-side routing.

## Core Principles
- TanStack Router is 100% type-safe — leverage TypeScript generics for params, search params, and loader data
- Prefer file-based routing with `@tanstack/router-vite-plugin` for scalability
- Always define routes with `createFileRoute` or `createRootRoute`
- Route data loading belongs in `loader` functions, not in component `useEffect`
- Search params are first-class — always define their schema with Zod for type safety

## File-Based Route Conventions
```
src/routes/
  __root.tsx          ← Root layout
  index.tsx           ← / route
  posts/
    index.tsx         ← /posts
    $postId.tsx       ← /posts/:postId (dynamic)
    _layout.tsx       ← Layout route (no path segment)
  _auth/              ← Pathless auth layout group
    dashboard.tsx
```

## Route Definition
```tsx
export const Route = createFileRoute('/posts/$postId')({
  loader: async ({ params }) => fetchPost(params.postId),
  component: PostComponent,
  errorComponent: ({ error }) => <ErrorBanner message={error.message} />,
  pendingComponent: () => <PostSkeleton />,
})

function PostComponent() {
  const post = Route.useLoaderData()     // type-safe
  const { postId } = Route.useParams()  // type-safe
  return <div>{post.title}</div>
}
```

## Type-Safe Search Params
- Always define search params with Zod and `validateSearch`
- Access with `Route.useSearch()` — never read `window.location.search` directly
```tsx
const searchSchema = z.object({
  page: z.number().int().min(1).default(1),
  q: z.string().optional(),
})

export const Route = createFileRoute('/search')({
  validateSearch: searchSchema,
  component: SearchPage,
})
```

## Navigation
- Use `<Link>` for internal navigation — never `<a href>`
- Always pass typed `params` and `search` — the compiler will catch mistakes
```tsx
<Link to="/posts/$postId" params={{ postId: '123' }}>View Post</Link>
```

## Loaders + TanStack Query Integration
```tsx
export const Route = createFileRoute('/posts')({
  loader: ({ context: { queryClient } }) =>
    queryClient.ensureQueryData(postsQueryOptions()),
  component: PostsPage,
})
```

## Router Context for Dependency Injection
```tsx
// __root.tsx
interface RouterContext { queryClient: QueryClient; auth: AuthState }
export const Route = createRootRouteWithContext<RouterContext>()({ component: RootLayout })

// main.tsx
const router = createRouter({ routeTree, context: { queryClient, auth } })
```

## Auth Guards
```tsx
export const Route = createFileRoute('/_auth/dashboard')({
  beforeLoad: ({ context }) => {
    if (!context.auth.isAuthenticated) throw redirect({ to: '/login' })
  },
  component: Dashboard,
})
```

## Performance
- Set `defaultPreload: 'intent'` on router for automatic prefetching on hover/focus
- Use `React.lazy` for route component code splitting
- Install `@tanstack/router-devtools` and render `<TanStackRouterDevtools />` in development

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

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

Все правила IDE по теме «Фронтенд и UI» →
tanstack-router-best-practices DeckardGer Набор правил по TanStack Router для React: типизация, загрузка данных, search params и навигация. Пригодится, когда роутинг в проекте разрастается. CX Codex +1 7 100установок router-core TanStack Скилл-навигатор по TanStack Router: разводит задачу по подскиллам и напоминает про вывод типов и клиентские лоадеры, на которых агенты ломаются. CX Codex +1 589установок react-router TanStack Скилл для агента по @tanstack/react-router: справочник хуков и компонентов плюс сборка файлового роутинга на Vite от установки до routeTree.gen. CX Codex +1 547установок tanstack-form tanstack-skills Скилл учит ассистента создавать формы на базе TanStack Form с типизацией TypeScript, валидацией через Zod или Valibot и динамическими массивами полей. CX Codex +1 4 300установок react-router-v7 existential-birds Скилл с практиками React Router v7: подсказывает, когда брать loader, Form или fetcher, и как настраивать вложенные маршруты. CX Codex +1 572установок tanstack-start-shadcn-tailwind официальный github Правило задаёт Copilot стек TanStack Start, Shadcn/ui и Tailwind CSS и требует валидировать внешние данные через Zod. ★ 40 418звёзд репо

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

typescript-nodejs-nextjs-react-ui-css-cursorrules- Правило для Cursor задаёт стиль кода на TypeScript, Next.js App Router, React и Tailwind. Пригодится, если агент пишет компоненты иначе, чем вы привыкли. ★ 41 011звёзд репо typescript-nextjs-supabase-cursorrules-prompt-file Правило для Cursor, которое держит TypeScript-код на Next.js App Router и Supabase в одном стиле: серверные компоненты, Shadcn UI, Tailwind. ★ 41 011звёзд репо typescript-code-convention-cursorrules-prompt-file Правило задаёт Cursor стиль кода на TypeScript в проектах на Next.js App Router, React, Expo, tRPC и Tailwind. Пригодится, когда агент пишет код вразнобой. ★ 41 011звёзд репо tauri-svelte-typescript-guide-cursorrules-prompt-f Правило для Cursor, которое задаёт агенту стиль работы с десктопными приложениями на Tauri: Svelte во фронтенде, TypeScript для типов. ★ 41 011звёзд репо tanstack-query-v5-cursorrules-prompt-file Правило для Cursor, которое задаёт агенту стиль работы с TanStack Query v5: ключи запросов, мутации, оптимистичные обновления, Suspense и префетчинг. ★ 41 011звёзд репо tailwind-react-firebase-cursorrules-prompt-file Правило для Cursor задаёт, как писать мобильное веб-приложение на Tailwind, React и Firebase: сначала мобильная вёрстка, потом остальное. ★ 41 011звёзд репо sveltekit-typescript-guide-cursorrules-prompt-file Правило для Cursor, которое настраивает агента на Svelte 5, SvelteKit и TypeScript: структура проекта, руны, состояние. ★ 41 011звёзд репо svelte Правило для Cursor с набором практик по Svelte: структура компонентов, реактивность, сторы, роутинг через SvelteKit и тесты. Пригодится, когда агент пишет или правит код на Svelte. ★ 41 011звёзд репо

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

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