TanStack Router v1: Erste Schritte mit typsicherem Routing

Ein vollständiger Leitfaden zum Aufbau von typsicherem, dateibasiertem Routing in Ihrer React-Anwendung mit TanStack Router v1 — der neuen stabilen Version.

Alex Chen
Alex Chen
8. Juni 20268 min read
Auch verfügbar auf:中文

TanStack Router v1 ist jetzt stabil und bringt einen grundlegend anderen Ansatz für das Routing in React-Anwendungen mit. Im Gegensatz zu herkömmlichen Routern behandelt TanStack Router Routen als erstklassige TypeScript-Bürger — was Ihnen End-to-End-Typsicherheit von der Routendefinition bis zur Link-Generierung bietet.

Warum TanStack Router?

Bevor Sie sich in die Einrichtung stürzen, lohnt es sich zu verstehen, warum TanStack Router existiert. Die Kernprobleme, die er löst:

  • Typsichere Links — <Link to="/blog/$slug" params={{ slug: 'hello' }}> ist vollständig typisiert
  • Eingebautes Datenladen — Route-Loader mit Suspense- und Streaming-Unterstützung
  • Suchparameter als Zustand — validierte, typisierte URL-Suchparameter
  • Verschachtelte Layouts — komplexe UIs mit verschachtelten Routenbäumen komponieren

Installation

bash
pnpm add @tanstack/react-router
pnpm add -D @tanstack/router-plugin @tanstack/router-devtools

Dateibasiertes Routing-Setup

Fügen Sie das Router-Plugin zu Ihrer Vite-Konfiguration hinzu:

ts
// vite.config.ts
import { tanstackRouter } from '@tanstack/router-plugin/vite'

export default defineConfig({
  plugins: [
    tanstackRouter({ autoCodeSplitting: true }),
    react(),
  ],
})

Erstellen Ihrer ersten Route

Erstellen Sie src/routes/index.tsx:

tsx
import { createFileRoute } from '@tanstack/react-router'

export const Route = createFileRoute('/')({
  component: HomePage,
})

function HomePage() {
  return <h1>Welcome to my app</h1>
}

Typsichere Navigation

Die wahre Leistungsfähigkeit zeigt sich, wenn Sie zwischen Routen navigieren:

tsx
import { Link, useNavigate } from '@tanstack/react-router'

// Vollständig typisiert — TypeScript erkennt ungültige Routen
function NavBar() {
  const navigate = useNavigate()

  return (
    <nav>
      <Link to="/" className="...">Home</Link>
      <Link to="/blog/$slug" params={{ slug: 'my-post' }}>Blog</Link>
      <button onClick={() => navigate({ to: '/dashboard' })}>
        Dashboard
      </button>
    </nav>
  )
}

Route Loaders

TanStack Router bietet erstklassige Unterstützung für das Laden von Daten auf Routenebene:

tsx
import { createFileRoute } from '@tanstack/react-router'

export const Route = createFileRoute('/users/$userId')({
  loader: async ({ params }) => {
    const user = await fetchUser(params.userId)
    return { user }
  },
  component: UserPage,
})

function UserPage() {
  const { user } = Route.useLoaderData()
  return <div>{user.name}</div>
}

Suchparameter

Eine der leistungsstärksten Funktionen von TanStack Router sind typsichere Suchparameter:

tsx
import { createFileRoute } from '@tanstack/react-router'
import { z } from 'zod'

const searchSchema = z.object({
  page: z.number().default(1),
  filter: z.string().optional(),
})

export const Route = createFileRoute('/products')({
  validateSearch: searchSchema,
  component: ProductsPage,
})

function ProductsPage() {
  const { page, filter } = Route.useSearch()
  // page ist als number typisiert, filter als string | undefined
  return <ProductGrid page={page} filter={filter} />
}

Verschachtelte Layouts

Erstellen Sie komplexe UI-Kompositionen mit Layout-Routen:

src/routes/
  __root.tsx          ← Root-Layout (header, footer)
  dashboard.tsx       ← Dashboard-Layout (sidebar)
  dashboard/
    index.tsx         ← /dashboard
    analytics.tsx     ← /dashboard/analytics
    settings.tsx      ← /dashboard/settings

Jede Layout-Datei rendert <Outlet />, um ihre untergeordneten Elemente anzuzeigen:

tsx
// dashboard.tsx
import { createFileRoute, Outlet } from '@tanstack/react-router'

export const Route = createFileRoute('/dashboard')({
  component: DashboardLayout,
})

function DashboardLayout() {
  return (
    <div className="flex">
      <Sidebar />
      <main className="flex-1">
        <Outlet />
      </main>
    </div>
  )
}

Wie geht es weiter?

Nachdem die Grundlagen nun funktionieren, erkunden Sie Folgendes:

  • Kontext — Teilen von Daten zwischen übergeordneten und untergeordneten Routen
  • Pending-Komponenten — Anzeigen von Ladezuständen während der Navigation
  • Error Boundaries — Elegantes Behandeln von Routenfehlern
  • Route-Guards — Umleiten von nicht authentifizierten Benutzern

Die Kombination von TanStack Router aus Typsicherheit, dateibasierten Konventionen und leistungsstarkem Datenladen macht ihn zu einer hervorragenden Grundlage für jede React-Anwendung.