如果您感到不耐烦并且更愿意跳过我们所有精彩的文档,这里是使用基于文件的路由生成和基于代码的路由配置开始使用 TanStack Router 的最低要求:
基于文件的路由生成(通过 Vite 和其他支持的打包器)是使用 TanStack Router 的推荐方式,因为它以最少的努力提供最佳的体验、性能和人体工程学。
npx create-tsrouter-app@latest my-app --framework solid --template file-router
npx create-tsrouter-app@latest my-app --framework solid --template file-router
查看 create-tsrouter-app 了解更多选项。
或者,您可以使用以下步骤手动设置项目:
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(),
// ...,
],
})
Tip
如果您没有使用 Vite 或任何支持的打包器,您可以查看 TanStack Router CLI 指南了解更多信息。
创建以下文件:
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>
}
无论您是使用 @tanstack/router-plugin 包并运行 npm run dev/npm run build 脚本,还是从包脚本手动运行 tsr watch/tsr generate 命令,路由树文件都将在 src/routeTree.gen.ts 生成。
导入生成的路由树并创建一个新的路由器实例:
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)
}
如果您使用这种模式,您应该将 index.html 文件中根 <div> 的 id 更改为 <div id='root'></div>
Important
以下示例展示了如何使用代码配置路由,为了简单起见,在此演示中放在一个文件中。虽然基于代码的生成允许您在单个文件中声明许多路由甚至路由器实例,但我们建议随着应用程序的增长,将路由拆分为单独的文件以获得更好的组织和性能。
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)
}
如果您略过了这些示例或没有理解某些内容,我们不怪您,因为要真正利用 TanStack Router 还有很多东西要学!让我们继续。