Routing
1 min readRapid overview
React Router
Basic Setup
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 />} />
<Route path="/users/:id" element={<UserProfile />} />
<Route path="*" element={<NotFound />} />
</Routes>
</BrowserRouter>
);
}
useParams & useNavigate
import { useParams, useNavigate } from 'react-router-dom';
function UserProfile() {
const { id } = useParams();
const navigate = useNavigate();
return (
<div>
<h1>User {id}</h1>
<button onClick={() => navigate('/users')}>Back to Users</button>
<button onClick={() => navigate(-1)}>Go Back</button>
</div>
);
}
Protected Routes
function ProtectedRoute({ children }) {
const { isAuthenticated } = useAuth();
if (!isAuthenticated) {
return <Navigate to="/login" replace />;
}
return children;
}
<Route
path="/dashboard"
element={
<ProtectedRoute>
<Dashboard />
</ProtectedRoute>
}
/>
Nested Routes
<Route path="/users" element={<UsersLayout />}>
<Route index element={<UsersList />} />
<Route path=":id" element={<UserDetail />} />
<Route path=":id/edit" element={<UserEdit />} />
</Route>
function UsersLayout() {
return (
<div>
<h1>Users</h1>
<Outlet /> {/* Nested routes render here */}
</div>
);
}
Lazy Loading Routes
const Dashboard = lazy(() => import('./pages/Dashboard'));
const Profile = lazy(() => import('./pages/Profile'));
<Route
path="/dashboard"
element={
<Suspense fallback={<Loading />}>
<Dashboard />
</Suspense>
}
/>