React Router is the standard routing library for React. It enables client-side navigation without full page reloads — mapping URL paths to specific React components.
Core concepts:
1. BrowserRouter + Routes + Route — basic setup:
1import { BrowserRouter, Routes, Route, Link } from "react-router-dom";23function App() {4 return (5 <BrowserRouter>6 <nav>7 <Link to="/">Home</Link> | {" "}8 <Link to="/about">About</Link> | {" "}9 <Link to="/users/42">User 42</Link>10 </nav>11 <Routes>12 <Route path="/" element={<Home />} />13 <Route path="/about" element={<About />} />14 <Route path="/users/:id" element={<User />} />15 <Route path="*" element={<NotFound />} />16 </Routes>17 </BrowserRouter>18 );19}
2. Dynamic routes with useParams:
1import { useParams } from "react-router-dom";23function User() {4 const { id } = useParams<{ id: string }>();5 return <div>User profile: {id}</div>;6}
3. Nested routes with Outlet:
1<Route path="/dashboard" element={<Dashboard />}>2 <Route index element={<Overview />} />3 <Route path="settings" element={<Settings />} />4 <Route path="analytics" element={<Analytics />} />5</Route>67// Dashboard layout — renders children routes in <Outlet />8function Dashboard() {9 return (10 <div className="dashboard">11 <aside>12 <NavLink to="/dashboard">Overview</NavLink>13 <NavLink to="/dashboard/settings">Settings</NavLink>14 </aside>15 <main>16 <Outlet /> {/* Renders the nested route component */}17 </main>18 </div>19 );20}
4. Programmatic navigation with useNavigate:
1import { useNavigate } from "react-router-dom";23function LoginPage() {4 const navigate = useNavigate();56 const handleLogin = async () => {7 const success = await login(credentials);8 if (success) {9 navigate("/dashboard");10 // or navigate(-1) to go back11 }12 };1314 return <button onClick={handleLogin}>Login</button>;15}
5. Protected routes:
1import { Navigate, Outlet } from "react-router-dom";23function ProtectedRoute() {4 const { user, loading } = useAuth();56 if (loading) return <Spinner />;7 if (!user) return <Navigate to="/login" replace />;89 return <Outlet />;10}1112// Usage in route config13<Route element={<ProtectedRoute />}>14 <Route path="/dashboard" element={<Dashboard />} />15 <Route path="/settings" element={<Settings />} />16</Route>
6. URL search params with useSearchParams:
1import { useSearchParams } from "react-router-dom";23function ProductList() {4 const [searchParams, setSearchParams] = useSearchParams();5 const category = searchParams.get("category") || "all";67 return (8 <div>9 <button onClick={() => setSearchParams({ category: "electronics" })}>10 Electronics11 </button>12 <p>Category: {category}</p>13 </div>14 );15}
Key concepts summary:
<BrowserRouter> — wraps the app, uses HTML5 history API<Routes> + <Route> — maps paths to components<Link> / <NavLink> — navigation without reloads<Outlet> — renders nested route contentuseParams, useNavigate, useSearchParams — navigation hooks<Navigate> — declarative redirects