src/routes/__root.tsxsrc/routes/index.tsxsrc/routes/about.tsxsrc/main.tsxWenn Sie ungeduldig sind und alle unsere wunderbaren Dokumentationen überspringen möchten, hier ist das absolute Minimum, um mit TanStack Router sowohl die dateibasierte Routengenerierung als auch die codebasierte Routenkonfiguration zu nutzen.
Die dateibasierte Routengenerierung (über Vite und andere unterstützte Bundler) ist die empfohlene Methode zur Verwendung von TanStack Router, da sie die beste Erfahrung, Leistung und Ergonomie bei minimalem Aufwand bietet.
npx create-tsrouter-app@latest my-app --framework solid --template file-router
npx create-tsrouter-app@latest my-app --framework solid --template file-router
Weitere Optionen finden Sie unter create-tsrouter-app.
Alternativ können Sie das Projekt manuell mit den folgenden Schritten einrichten.
npm install @tanstack/solid-router @tanstack/solid-router-devtools
npm install -D @tanstack/router-plugin
# or
pnpm add @tanstack/solid-router @tanstack/solid-router-devtools
pnpm add -D @tanstack/router-plugin
# or
yarn add @tanstack/solid-router @tanstack/solid-router-devtools
yarn add -D @tanstack/router-plugin
# or
bun add @tanstack/solid-router @tanstack/solid-router-devtools
bun add -D @tanstack/router-plugin
# or
deno add npm:@tanstack/solid-router npm:@tanstack/router-plugin npm:@tanstack/solid-router-devtools
npm install @tanstack/solid-router @tanstack/solid-router-devtools
npm install -D @tanstack/router-plugin
# or
pnpm add @tanstack/solid-router @tanstack/solid-router-devtools
pnpm add -D @tanstack/router-plugin
# or
yarn add @tanstack/solid-router @tanstack/solid-router-devtools
yarn add -D @tanstack/router-plugin
# or
bun add @tanstack/solid-router @tanstack/solid-router-devtools
bun add -D @tanstack/router-plugin
# or
deno add npm:@tanstack/solid-router npm:@tanstack/router-plugin npm:@tanstack/solid-router-devtools
// vite.config.ts
import { defineConfig } from 'vite'
import solid from 'vite-plugin-solid'
import { tanstackRouter } from '@tanstack/router-plugin/vite'
// https://vitejs.dev/config/
export default defineConfig({
plugins: [
tanstackRouter({
target: 'solid',
autoCodeSplitting: true,
}),
solid(),
// ...,
],
})
// vite.config.ts
import { defineConfig } from 'vite'
import solid from 'vite-plugin-solid'
import { tanstackRouter } from '@tanstack/router-plugin/vite'
// https://vitejs.dev/config/
export default defineConfig({
plugins: [
tanstackRouter({
target: 'solid',
autoCodeSplitting: true,
}),
solid(),
// ...,
],
})
Tipp
Wenn Sie kein Vite oder einen der unterstützten Bundler verwenden, können Sie sich die Anleitung zum TanStack Router CLI ansehen.
Erstellen Sie die folgenden Dateien
import { createRootRoute, Link, Outlet } from '@tanstack/solid-router'
import { TanStackRouterDevtools } from '@tanstack/solid-router-devtools'
export const Route = createRootRoute({
component: () => (
<>
<div class="p-2 flex gap-2">
<Link to="/" class="[&.active]:font-bold">
Home
</Link>{' '}
<Link to="/about" class="[&.active]:font-bold">
About
</Link>
</div>
<hr />
<Outlet />
<TanStackRouterDevtools />
</>
),
})
import { createRootRoute, Link, Outlet } from '@tanstack/solid-router'
import { TanStackRouterDevtools } from '@tanstack/solid-router-devtools'
export const Route = createRootRoute({
component: () => (
<>
<div class="p-2 flex gap-2">
<Link to="/" class="[&.active]:font-bold">
Home
</Link>{' '}
<Link to="/about" class="[&.active]:font-bold">
About
</Link>
</div>
<hr />
<Outlet />
<TanStackRouterDevtools />
</>
),
})
import { createFileRoute } from '@tanstack/solid-router'
export const Route = createFileRoute('/')({
component: Index,
})
function Index() {
return (
<div class="p-2">
<h3>Welcome Home!</h3>
</div>
)
}
import { createFileRoute } from '@tanstack/solid-router'
export const Route = createFileRoute('/')({
component: Index,
})
function Index() {
return (
<div class="p-2">
<h3>Welcome Home!</h3>
</div>
)
}
import { createFileRoute } from '@tanstack/solid-router'
export const Route = createFileRoute('/about')({
component: About,
})
function About() {
return <div class="p-2">Hello from About!</div>
}
import { createFileRoute } from '@tanstack/solid-router'
export const Route = createFileRoute('/about')({
component: About,
})
function About() {
return <div class="p-2">Hello from About!</div>
}
Unabhängig davon, ob Sie das Paket @tanstack/router-plugin verwenden und die Skripte npm run dev/npm run build ausführen, oder die Befehle tsr watch/tsr generate manuell über Ihre Paket-Skripte ausführen, wird die Routenbaumdatei unter src/routeTree.gen.ts generiert.
Importieren Sie den generierten Routenbaum und erstellen Sie eine neue Router-Instanz
import { render } from 'solid-js/web'
import { RouterProvider, createRouter } from '@tanstack/solid-router'
// Import the generated route tree
import { routeTree } from './routeTree.gen'
// Create a new router instance
const router = createRouter({ routeTree })
// Register the router instance for type safety
declare module '@tanstack/solid-router' {
interface Register {
router: typeof router
}
}
// Render the app
const rootElement = document.getElementById('root')!
if (!rootElement.innerHTML) {
render(() => <RouterProvider router={router} />, rootElement)
}
import { render } from 'solid-js/web'
import { RouterProvider, createRouter } from '@tanstack/solid-router'
// Import the generated route tree
import { routeTree } from './routeTree.gen'
// Create a new router instance
const router = createRouter({ routeTree })
// Register the router instance for type safety
declare module '@tanstack/solid-router' {
interface Register {
router: typeof router
}
}
// Render the app
const rootElement = document.getElementById('root')!
if (!rootElement.innerHTML) {
render(() => <RouterProvider router={router} />, rootElement)
}
Wenn Sie mit diesem Muster arbeiten, sollten Sie die id des Root- <div> in Ihrer index.html Datei zu <div id='root'></div> ändern.
Wichtig
Das folgende Beispiel zeigt, wie Routen per Code konfiguriert werden. Zu Demonstrationszwecken ist dies in einer einzigen Datei. Obwohl die codebasierte Generierung es Ihnen ermöglicht, viele Routen und sogar die Router-Instanz in einer einzigen Datei zu deklarieren, empfehlen wir, Ihre Routen für eine bessere Organisation und Leistung mit wachsender Anwendung in separate Dateien aufzuteilen.
import { render } from 'solid-js/web'
import {
Outlet,
RouterProvider,
Link,
createRouter,
createRoute,
createRootRoute,
} from '@tanstack/solid-router'
import { TanStackRouterDevtools } from '@tanstack/solid-router-devtools'
const rootRoute = createRootRoute({
component: () => (
<>
<div class="p-2 flex gap-2">
<Link to="/" class="[&.active]:font-bold">
Home
</Link>{' '}
<Link to="/about" class="[&.active]:font-bold">
About
</Link>
</div>
<hr />
<Outlet />
<TanStackRouterDevtools />
</>
),
})
const indexRoute = createRoute({
getParentRoute: () => rootRoute,
path: '/',
component: function Index() {
return (
<div class="p-2">
<h3>Welcome Home!</h3>
</div>
)
},
})
const aboutRoute = createRoute({
getParentRoute: () => rootRoute,
path: '/about',
component: function About() {
return <div class="p-2">Hello from About!</div>
},
})
const routeTree = rootRoute.addChildren([indexRoute, aboutRoute])
const router = createRouter({ routeTree })
declare module '@tanstack/solid-router' {
interface Register {
router: typeof router
}
}
const rootElement = document.getElementById('app')!
if (!rootElement.innerHTML) {
render(() => <RouterProvider router={router} />, rootElement)
}
import { render } from 'solid-js/web'
import {
Outlet,
RouterProvider,
Link,
createRouter,
createRoute,
createRootRoute,
} from '@tanstack/solid-router'
import { TanStackRouterDevtools } from '@tanstack/solid-router-devtools'
const rootRoute = createRootRoute({
component: () => (
<>
<div class="p-2 flex gap-2">
<Link to="/" class="[&.active]:font-bold">
Home
</Link>{' '}
<Link to="/about" class="[&.active]:font-bold">
About
</Link>
</div>
<hr />
<Outlet />
<TanStackRouterDevtools />
</>
),
})
const indexRoute = createRoute({
getParentRoute: () => rootRoute,
path: '/',
component: function Index() {
return (
<div class="p-2">
<h3>Welcome Home!</h3>
</div>
)
},
})
const aboutRoute = createRoute({
getParentRoute: () => rootRoute,
path: '/about',
component: function About() {
return <div class="p-2">Hello from About!</div>
},
})
const routeTree = rootRoute.addChildren([indexRoute, aboutRoute])
const router = createRouter({ routeTree })
declare module '@tanstack/solid-router' {
interface Register {
router: typeof router
}
}
const rootElement = document.getElementById('app')!
if (!rootElement.innerHTML) {
render(() => <RouterProvider router={router} />, rootElement)
}
Wenn Sie diese Beispiele überflogen haben oder etwas nicht verstanden haben, machen wir Ihnen keine Vorwürfe, denn es gibt noch viel mehr zu lernen, um TanStack Router voll auszuschöpfen! Machen wir weiter.
Ihre wöchentliche Dosis JavaScript-Nachrichten. Jeden Montag kostenlos an über 100.000 Entwickler geliefert.