React Router
React Router enables client-side navigation in single-page applications.
Setting Up Routes
import { BrowserRouter, Routes, Route, Link } from "react-router-dom";
function App() {
return (
<BrowserRouter>
<nav>
<Link to="/">Home</Link>
<Link to="/about">About</Link>
</nav>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/about" element={<About />} />
</Routes>
</BrowserRouter>
);
}
Dynamic Segments
Use parameters in the URL:
<Route path="/users/:id" element={<UserProfile />} />
function UserProfile() {
const { id } = useParams();
return <h1>User {id}</h1>;
}
Navigating Programmatically
import { useNavigate } from "react-router-dom";
function LoginButton() {
const navigate = useNavigate();
const handleLogin = async () => {
await loginUser();
navigate("/dashboard");
};
return <button onClick={handleLogin}>Login</button>;
}
Nested Routes
<Route path="/dashboard" element={<Dashboard />}>
<Route path="profile" element={<Profile />} />
<Route path="settings" element={<Settings />} />
</Route>
function Dashboard() {
return (
<div>
<h1>Dashboard</h1>
<Outlet />
</div>
);
}
Best Practices
- Keep route definitions in one place
- Use
Linkinstead of<a>tags for navigation - Use nested routes for related pages
- Handle 404 with a catch-all route (
path="*")
Common Mistakes
- Using
<a>tags causes full page reloads - Forgetting to wrap with
BrowserRouter - Not using
keyon dynamic routes when switching - Missing
Outletin parent routes breaks nesting