React TanStack Router
Directory Structure
.
├── index.html
├── package.json
├── src
│ ├── app.tsx
│ ├── main.tsx
│ ├── routes
│ │ ├── index.tsx
│ │ ├── react.tsx
│ │ └── __root.tsx
│ └── routeTree.gen.ts
├── tsconfig.json
└── vite.config.ts
sh
pnpm install @tanstack/react-router
sh
pnpm install -D @tanstack/router-vite-plugin
vite.config.ts
ts
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react-swc'
import tsconfigPaths from 'vite-tsconfig-paths'
import { TanStackRouterVite } from '@tanstack/router-vite-plugin'
export default defineConfig({
plugins: [react(), tsconfigPaths(), TanStackRouterVite()],
})
main.tsx
tsx
import React from 'react'
import { createRoot } from 'react-dom/client'
import App from './app'
const rootElement = document.getElementById('root')
const root = rootElement ? createRoot(rootElement) : console.error('Root element not found')
if (root) {
root.render(
<React.StrictMode>
<App />
</React.StrictMode>,
)
}
app.tsx
tsx
import { createRouter, RouterProvider } from '@tanstack/react-router'
import { routeTree } from './routeTree.gen'
const router = createRouter({ routeTree })
declare module '@tanstack/react-router' {
interface Register {
router: typeof router
}
}
const App = () => {
return <RouterProvider router={router} />
}
export default App
File-Based Routing
tsx
import React from 'react'
import { Outlet, createRootRoute } from '@tanstack/react-router'
export const Route = createRootRoute({
component: () => <Outlet />,
})
http://localhost:***/
tsx
import { createFileRoute } from '@tanstack/react-router'
export const Route = createFileRoute('/')({
component: RouteComponent,
})
function RouteComponent() {
return <div>Hello "/"!</div>
}
http://localhost:***/react
tsx
import { createFileRoute } from '@tanstack/react-router'
export const Route = createFileRoute('/react')({
component: RouteComponent,
})
function RouteComponent() {
return <div>Hello "/react"!</div>
}