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

ConceptDescription
BrowserRouterWraps app, enables URL-based routing
Routes / RouteDeclares URL → component mapping
Link / NavLinkNavigate without full page reload
OutletRenders child routes inside a layout
useNavigateProgrammatic navigation
useParamsAccess URL parameters /users/:id
useSearchParamsAccess query string ?page=2
useLocationCurrent URL, pathname, state
loader / actionData fetching and mutations (v6.4+)

Route Matching

/users          → UserList
/users/:id      → UserDetail (id = dynamic)
/users/new      → CreateUser (static wins over dynamic)
/users/*        → Catch-all

Nested 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