AgentSkillsCN

react-tanstack-router

TanStack Router——100% 类型安全的路由、基于文件的路由、loader、search params。适用于在 React 应用(非 Next.js)中实现路由时。

SKILL.md
--- frontmatter
name: react-tanstack-router
description: TanStack Router - 100% type-safe routing, file-based routes, loaders, search params. Use when implementing routing in React apps (NOT Next.js).
versions:
  tanstack-router: "1.x (latest)"
  react: 19
  zod: 3.x
user-invocable: true
references: references/installation.md, references/file-based-routing.md, references/route-params.md, references/search-params.md, references/loaders.md, references/navigation.md, references/route-context.md, references/nested-routes.md, references/error-handling.md, references/code-splitting.md, references/preloading.md, references/auth-guards.md, references/tanstack-query.md, references/ssr.md, references/typescript.md, references/devtools.md, references/hooks.md, references/components.md, references/templates/basic-setup.md, references/templates/feature-module.md, references/templates/auth-protected-routes.md, references/templates/search-filters.md, references/templates/dashboard-layout.md
related-skills: react-forms, react-state, react-19, solid-react

TanStack Router

100% type-safe router for React with file-based routing, loaders, search params validation, and deep TanStack Query integration.

Agent Workflow (MANDATORY)

Before ANY implementation, use TeamCreate to spawn 3 agents:

  1. fuse-ai-pilot:explore-codebase - Analyze existing routes and navigation patterns
  2. fuse-ai-pilot:research-expert - Verify latest TanStack Router docs via Context7/Exa
  3. mcp__context7__query-docs - Check file-based routing and type-safe patterns

After implementation, run fuse-ai-pilot:sniper for validation.


Overview

Why TanStack Router?

TanStack Router is the recommended choice for React SPAs requiring type-safe routing with search params validation.

FeatureTanStack RouterReact Router v7
Type SafetyFull inferenceAuto-generated
File-based RoutingBuilt-inFramework mode
Search Params ValidationZod, ValibotManual
PreloadingIntent, renderLimited
TanStack Query IntegrationNativeManual

When to Use


Critical Rules

  1. ALWAYS use file-based routing - Auto-generated type safety → file-based-routing.md
  2. ALWAYS validate search params - Use Zod schemas with zodValidatorsearch-params.md
  3. ALWAYS use Route.useLoaderData() - Not global useLoaderData → hooks.md
  4. ALWAYS register router types - declare module '@tanstack/react-router'typescript.md
  5. PREFER loaders over useEffect - Data fetching before render → loaders.md
  6. INTEGRATE TanStack Query - For caching, mutations, optimistic updates → tanstack-query.md
  7. FOLLOW SOLID architecture - Modules, interfaces, file size limits → solid-react skill

Quick Reference: What to Read

Starting a new project

  1. Read installation.md for configuration
  2. Copy template basic-setup.md as base

Creating a feature module (posts, users, etc.)

  1. Follow architecture in templates/feature-module.md
  2. Use patterns from tanstack-query.md for queries

Implementing authentication

  1. Read auth-guards.md for concepts
  2. Copy template auth-protected-routes.md

Creating a page with filters/search

  1. Read search-params.md for Zod validation
  2. Copy template search-filters.md

Creating a dashboard with nested layouts

  1. Read nested-routes.md for concepts
  2. Copy template dashboard-layout.md

Project Structure (SOLID Architecture)

Recommended structure following SOLID principles from solid-react skill.

text
src/
├── modules/
│   ├── cores/                      # Shared between features
│   │   ├── lib/
│   │   │   ├── router/router.ts    # Router configuration
│   │   │   └── query/client.ts     # QueryClient configuration
│   │   ├── components/layouts/     # Shared layouts
│   │   └── interfaces/             # Shared types
│   └── [feature]/                  # Feature module
│       ├── src/
│       │   ├── interfaces/         # Module types
│       │   ├── queries/            # TanStack Query options
│       │   └── components/         # Module components
│       └── index.ts                # Public exports
├── routes/                         # Route definitions ONLY
│   ├── __root.tsx
│   └── [feature]/
└── routeTree.gen.ts               # Auto-generated (DO NOT MODIFY)

Full template: templates/basic-setup.md


Reference Guide

Concepts (references/) - Conceptual Documentation

TopicReferenceWhen to consult
Setupinstallation.mdVite/Webpack config, React Router migration
File Routingfile-based-routing.mdNaming conventions, routes/ structure
URL Paramsroute-params.mdDynamic routes $postId, parsing
Search Paramssearch-params.mdZod validation, URL filters, pagination
Data Loadingloaders.mdLoaders, prefetch, TanStack Query integration
Navigationnavigation.mdLink, useNavigate, redirects
Contextroute-context.mdDependency injection, QueryClient, user
Layoutsnested-routes.mdNested layouts, Outlet, pathless routes
Errorserror-handling.mdError boundaries, 404, pending states
Lazy Loadingcode-splitting.mdCode splitting, bundle optimization
Preloadingpreloading.mdPreload intent/render, prefetch
Authauth-guards.mdProtected routes, RBAC, login redirect
TanStack Querytanstack-query.mdqueryOptions, mutations, cache
SSRssr.mdServer-side rendering, TanStack Start
TypeScripttypescript.mdType registration, inference, type safety
DevToolsdevtools.mdRouter DevTools setup
Hooks APIhooks.mduseParams, useSearch, useNavigate, etc.
Componentscomponents.mdLink, Outlet, Navigate, RouterProvider

Templates (references/templates/) - Complete Copy-Paste Ready Code

TemplateWhen to use
basic-setup.mdStart a new project with SOLID architecture
feature-module.mdCreate a complete feature module (interfaces, queries, components)
auth-protected-routes.mdImplement login, protected routes, RBAC
search-filters.mdPage with URL filters, pagination, sorting
dashboard-layout.mdDashboard with sidebar, tabs, nested layouts

Core Patterns

1. Root Route with Context

Router context configuration for dependency injection.

typescript
// src/routes/__root.tsx
export const Route = createRootRouteWithContext<RouterContext>()({
  component: RootComponent,
})

Details: route-context.md Template: templates/basic-setup.md

2. File Route with Loader and TanStack Query

Recommended pattern for data loading with cache.

typescript
// src/routes/posts/$postId.tsx
export const Route = createFileRoute('/posts/$postId')({
  loader: ({ context: { queryClient }, params }) =>
    queryClient.ensureQueryData(postQueryOptions(params.postId)),
  component: PostPage,
})

Details: loaders.md, tanstack-query.md Template: templates/feature-module.md

3. Search Params with Zod Validation

Type-safe filters and pagination via URL.

typescript
// src/routes/posts/index.tsx
const searchSchema = z.object({
  page: z.number().min(1).default(1),
  sort: z.enum(['newest', 'oldest']).default('newest'),
})

export const Route = createFileRoute('/posts/')({
  validateSearch: zodValidator(searchSchema),
})

Details: search-params.md Template: templates/search-filters.md

4. Protected Routes

Authentication guard with redirect.

typescript
// src/routes/_authenticated/_authenticated.tsx
export const Route = createFileRoute('/_authenticated')({
  beforeLoad: ({ context, location }) => {
    if (!context.user) {
      throw redirect({ to: '/login', search: { redirect: location.href } })
    }
  },
})

Details: auth-guards.md Template: templates/auth-protected-routes.md

5. Nested Layouts with Outlet

Nested layouts for dashboards.

typescript
// src/routes/_dashboard/_dashboard.tsx
export const Route = createFileRoute('/_dashboard')({
  component: () => (
    <DashboardLayout>
      <Outlet />
    </DashboardLayout>
  ),
})

Details: nested-routes.md Template: templates/dashboard-layout.md


Best Practices

Do's

PatternReference
Use Route API (Route.useParams())hooks.md
Validate search params with Zodsearch-params.md
Use ensureQueryData in loaderstanstack-query.md
Preload on intent for linkspreloading.md
Separate interfaces in interfaces/solid-react skill

Don'ts

Anti-patternWhyAlternative
useLoaderData() without fromNot type-safeRoute.useLoaderData()
useEffect for fetchNot optimalUse loaders
Mutate search paramsImmutabilitynavigate({ search: {...} })
Skip error boundariesDegraded UXAdd errorComponent
Interfaces in componentsCouplinginterfaces/ folder

Migration from React Router

See installation.md for complete migration guide.

React RouterTanStack Router
useParams()Route.useParams()
useSearchParams()Route.useSearch()
useLoaderData()Route.useLoaderData()
loader functionloader option
action functionTanStack Query mutations

Version History

  • v1.x - Frequent releases (incremental versioning)
  • Key milestones: Head/meta tags, Search params middlewares, Zod adapter