react-router-v7▌
existential-birds/beagle · updated Apr 25, 2026
Router Setup (Data Mode):
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(<RouterProvider router={router} />);
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 (
<div>
<h1>Dashboard</h1>
<Outlet /> {/* Renders child routes */}
</div>
);
}
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 <Form>: Creating/deleting with URL change, adding to history
Use useFetcher: Inline updates, list operations, popovers - no URL change
Loader vs useEffect
Use loader: Data before render, server-side fetch, automatic revalidation Use useEffect: Client-only data, user-interaction dependent, subscriptions
Additional Documentation
- Data Loading: See references/loaders.md for loader patterns, parallel loading, search params
- Mutations: See references/actions.md for actions, Form, fetchers, validation
- Navigation: See references/navigation.md for Link, NavLink, programmatic nav
- Advanced: See references/advanced.md for error boundaries, protected routes, lazy loading
Mode Comparison
| Feature | Framework Mode | Data Mode | Declarative Mode |
|---|---|---|---|
| Setup | Vite plugin | createBrowserRouter |
<BrowserRouter> |
| Type Safety | Auto-generated types | Manual | Manual |
| SSR Support | Built-in | Manual | Limited |
| Use Case | Full-stack apps | SPAs with control | Simple/legacy |
Discussion
Product Hunt–style comments (not star reviews)- No comments yet — start the thread.
Ratings
4.6★★★★★70 reviews- ★★★★★Min Dixit· Dec 28, 2024
react-router-v7 is among the better-maintained entries we tried; worth keeping pinned for repeat workflows.
- ★★★★★Dhruvi Jain· Dec 12, 2024
Registry listing for react-router-v7 matched our evaluation — installs cleanly and behaves as described in the markdown.
- ★★★★★Arjun Gonzalez· Dec 12, 2024
Solid pick for teams standardizing on skills: react-router-v7 is focused, and the summary matches what you get after install.
- ★★★★★Arjun Lopez· Dec 12, 2024
Registry listing for react-router-v7 matched our evaluation — installs cleanly and behaves as described in the markdown.
- ★★★★★Nia Kapoor· Dec 12, 2024
react-router-v7 has been reliable in day-to-day use. Documentation quality is above average for community skills.
- ★★★★★Fatima Gonzalez· Dec 4, 2024
Useful defaults in react-router-v7 — fewer surprises than typical one-off scripts, and it plays nicely with `npx skills` flows.
- ★★★★★Arjun Sanchez· Nov 23, 2024
I recommend react-router-v7 for anyone iterating fast on agent tooling; clear intent and a small, reviewable surface area.
- ★★★★★Kofi Anderson· Nov 19, 2024
Keeps context tight: react-router-v7 is the kind of skill you can hand to a new teammate without a long onboarding doc.
- ★★★★★Oshnikdeep· Nov 3, 2024
Solid pick for teams standardizing on skills: react-router-v7 is focused, and the summary matches what you get after install.
- ★★★★★Fatima Ndlovu· Nov 3, 2024
Registry listing for react-router-v7 matched our evaluation — installs cleanly and behaves as described in the markdown.
showing 1-10 of 70