--- name: web-navigation description: Navigation and routing patterns for React web applications. Use when implementing React Router, Next.js routing, deep links, or handling navigation state. --- # Web Navigation (React) ## React Router (v6) ### Basic Setup ```typescript // App.tsx import { BrowserRouter, Routes, Route } from 'react-router-dom'; function App() { return ( } /> } /> } /> } /> } /> ); } ``` ### Nested Routes & Layouts ```typescript // Layout with shared UI function DashboardLayout() { return (
{/* Child routes render here */}
); } // Routes }> } /> } /> } /> ``` ### Dynamic Routes ```typescript import { useParams, useSearchParams } from 'react-router-dom'; // Route: /users/:id function UserDetailPage() { const { id } = useParams<{ id: string }>(); const [searchParams, setSearchParams] = useSearchParams(); const tab = searchParams.get('tab') || 'profile'; return (

User {id}

setSearchParams({ tab: t })} />
); } ``` ### Programmatic Navigation ```typescript import { useNavigate, useLocation } from 'react-router-dom'; function LoginPage() { const navigate = useNavigate(); const location = useLocation(); async function handleLogin() { await login(credentials); // Redirect to intended page or default const from = location.state?.from?.pathname || '/dashboard'; navigate(from, { replace: true }); } // Other navigation methods navigate('/users'); // Push to history navigate('/users', { replace: true }); // Replace current entry navigate(-1); // Go back navigate(1); // Go forward } ``` ### Link Component ```typescript import { Link, NavLink } from 'react-router-dom'; // Basic link About // With state Checkout // NavLink - active styling isActive ? 'nav-link active' : 'nav-link' } > Dashboard ``` --- ## Next.js App Router ### File-Based Routing ``` app/ ├── layout.tsx # Root layout ├── page.tsx # / route ├── about/ │ └── page.tsx # /about route ├── users/ │ ├── page.tsx # /users route │ └── [id]/ │ └── page.tsx # /users/:id route ├── (auth)/ # Route group (no URL segment) │ ├── login/ │ │ └── page.tsx # /login route │ └── register/ │ └── page.tsx # /register route └── dashboard/ ├── layout.tsx # Dashboard layout ├── page.tsx # /dashboard └── settings/ └── page.tsx # /dashboard/settings ``` ### Layouts ```typescript // app/layout.tsx - Root layout export default function RootLayout({ children, }: { children: React.ReactNode; }) { return (
{children}