HomeReact
Chapter 13
13 — React Router (v6+)
Client-side routing for React SPAs. React Router v6 uses a declarative, component-based approach with nested routes, loaders, and actions.
Core Concepts
| Concept | Description |
|---|---|
BrowserRouter | Wraps app, enables URL-based routing |
Routes / Route | Declares URL → component mapping |
Link / NavLink | Navigate without full page reload |
Outlet | Renders child routes inside a layout |
useNavigate | Programmatic navigation |
useParams | Access URL parameters /users/:id |
useSearchParams | Access query string ?page=2 |
useLocation | Current URL, pathname, state |
loader / action | Data fetching and mutations (v6.4+) |
Route Matching
/users → UserList
/users/:id → UserDetail (id = dynamic)
/users/new → CreateUser (static wins over dynamic)
/users/* → Catch-allNested Routes & Layouts
<Route path="/dashboard" element={<DashboardLayout />}>
<Route index element={<Overview />} /> {/* /dashboard */}
<Route path="settings" element={<Settings />} /> {/* /dashboard/settings */}
<Route path="profile" element={<Profile />} /> {/* /dashboard/profile */}
</Route>The parent layout renders <Outlet /> where child routes appear.
Protected Routes
Wrap routes in a guard component that checks auth and redirects:
<Route element={<RequireAuth />}>
<Route path="/dashboard" element={<Dashboard />} />
</Route>File
router.tsx— setup, nested routes, params, search params, navigation, protected routes, loaders, error boundaries, lazy loading