React Router v7 Best Practices Quick Reference
Router Setup (Data Mode):
import { createBrowserRouter, RouterProvider } from "react-router";
const router = createBrowserRouter([ { path: "/", Component: Root, ErrorBoundary: RootErrorBoundary, loader: rootLoader, children: [ { index: true, Component: Home }, { path: "products/:productId", Component: Product, loader: productLoader }, ], }, ]);
ReactDOM.createRoot(root).render(
Framework Mode (Vite plugin):
// routes.ts import { index, route } from "@react-router/dev/routes";
export default [ index("./home.tsx"), route("products/:pid", "./product.tsx"), ];
Route Configuration Nested Routes with Outlets createBrowserRouter([ { path: "/dashboard", Component: Dashboard, children: [ { index: true, Component: DashboardHome }, { path: "settings", Component: Settings }, ], }, ]);
function Dashboard() { return (
Dashboard
Dynamic Segments and Splats { path: "teams/:teamId" } // params.teamId { path: ":lang?/categories" } // Optional segment { path: "files/" } // Splat: params[""]
Key Decision Points Form vs Fetcher
Use