React Router v6
React Router v6 is the standard solution for client-side routing in React apps. It maps URL paths to components, enabling navigation without full page reloads.
1 Setup & Basic Routing
Terminal — Install
npm install react-router-dom
React — Router Setup
import { BrowserRouter, Routes, Route, Link, NavLink,
useParams, useNavigate, Outlet } from "react-router-dom";
function App() {
return (
<BrowserRouter>
<Nav />
<Routes>
<Route path="/" element={<Home />} />
<Route path="/about" element={<About />} />
<Route path="/users" element={<UsersLayout />}>
<Route index element={<UserList />} /> {/* /users */}
<Route path=":id" element={<UserDetail />} /> {/* /users/42 */}
</Route>
<Route path="*" element={<NotFound />} /> {/* 404 */}
</Routes>
</BrowserRouter>
);
}
// Nested layout with Outlet
function UsersLayout() {
return (
<div>
<h2>Users Section</h2>
<Outlet /> {/* renders UserList or UserDetail */}
</div>
);
}
// URL params
function UserDetail() {
const { id } = useParams();
const navigate = useNavigate();
return (
<div>
<p>User ID: {id}</p>
<button onClick={() => navigate(-1)}>Go Back</button>
</div>
);
}
// Navigation
function Nav() {
return (
<nav>
<NavLink to="/" className={({ isActive }) => isActive ? "active" : ""}>Home</NavLink>
<NavLink to="/about" className={({ isActive }) => isActive ? "active" : ""}>About</NavLink>
<NavLink to="/users" className={({ isActive }) => isActive ? "active" : ""}>Users</NavLink>
</nav>
);
}
2 Code Challenge
Challenge: Build a blog app with routes:
/ (post list), /posts/:id (post detail), /new (create post form). Add a protected route that redirects to /login if the user is not logged in.