React Router

Types โ€ข Hooks โ€ข Navigation โ€ข Nested Routes
BrowserRouter useNavigate useParams useSearchParams Outlet
๐Ÿ“˜ CH05-S08 ยท React Foundations
โš› FixWins.com
Chapter 05
ยฉ 2026 ยท FixWins.com
01 / 09

๐ŸŸฃ Router Types

LIVE

Router Configuration

TYPES Choose One

๐ŸŒ BrowserRouter (Standard)
#๏ธโƒฃ HashRouter (Static)
๐Ÿง  MemoryRouter (Testing)
URL: example.com/about
๐Ÿ’ก
Wrap your entire App in ONE router at the root level. Never nest routers.
ROUTER TYPES
// --- App.js (Parent) ---
import React from 'react';
function App() {
  return <div className="App"><h1>React Router</h1></div>;
}
export default App;

// --- main.jsx (Entry Point) ---
import React from 'react';
import ReactDOM from 'react-dom/client';
import { BrowserRouter } from 'react-router-dom';
import App from './App';

// Choose ONE router type for your app:
// 1. BrowserRouter (Standard, uses HTML5 history API)
// 2. HashRouter (Uses URL hash, good for static hosting)
// 3. MemoryRouter (Keeps history in memory, good for testing)

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
  <BrowserRouter>
    <App />
  </BrowserRouter>
);
ยฉ 2026 ยท FixWins.com
02 / 09

๐ŸŸฃ Link & NavLink

ยฉ 2026 ยท FixWins.com
03 / 09

๐ŸŸฃ useNavigate

LIVE

Programmatic Navigation

HOOK Redirect on Action

๐Ÿ’ก
Use navigate('/path') after form submissions or API calls. Use {'{ replace: true }'} to prevent going back.
useNavigate
// --- App.js (Parent) ---
import React from 'react';
import { Routes, Route } from 'react-router-dom';
import Login from './Login';
import Dashboard from './Dashboard';

function App() {
  return (
    <Routes>
      <Route path="/login" element={<Login />} />
      <Route path="/dashboard" element={<Dashboard />} />
    </Routes>
  );
}
export default App;

// --- Login.jsx (Child Component) ---
import React, { useState } from 'react';
import { useNavigate } from 'react-router-dom';

const Login = () => {
  const [username, setUsername] = useState('');
  // Hook to programmatically change routes
  const navigate = useNavigate();

  const handleSubmit = (e) => {
    e.preventDefault();
    if (username) {
      // Navigate to dashboard, replacing history stack
      navigate('/dashboard', { replace: true });
    }
  };

  return (
    <form onSubmit={handleSubmit}>
      <input 
        value={username}
        onChange={(e) => setUsername(e.target.value)}
        placeholder="Username"
      />
      <button type="submit">Login</button>
    </form>
  );
};

export default Login;
ยฉ 2026 ยท FixWins.com
04 / 09

๐ŸŸฃ useParams

LIVE

Dynamic Route Segments

HOOK Read URL Params

Route: /user/42

User Profile

Fetching data for User ID: 42

๐Ÿ’ก
Define dynamic segments in your route config: <Route path="/user/:id" />, then read them with useParams().
useParams
// --- App.js (Parent) ---
import React from 'react';
import { Routes, Route } from 'react-router-dom';
import UserProfile from './UserProfile';

function App() {
  return (
    <Routes>
      <Route path="/user/:id" element={<UserProfile />} />
    </Routes>
  );
}
export default App;

// --- UserProfile.jsx (Child Component) ---
import React, {  useState } from 'react';
import { useParams } from 'react-router-dom';

const UserProfile = () => {
  // Hook to access dynamic URL segments (e.g., /user/:id)
  const { id } = useParams();

 

  return (
    <div className="profile">
      <p>User ID: {id}</p>
    </div>
  );
};

export default UserProfile;
ยฉ 2026 ยท FixWins.com
05 / 09

๐ŸŸฃ useSearchParams

ยฉ 2026 ยท FixWins.com
06 / 09

๐ŸŸฃ useLocation

LIVE

Current Location Object

HOOK Track Path Changes

Pathname: /home
โฌ†๏ธ Scrolled to Top!
๐Ÿ’ก
Use useLocation in a <ScrollToTop> component to reset scroll position on route changes, or for analytics tracking.
useLocation
// --- App.js (Parent) ---
import React from 'react';
import { Routes, Route } from 'react-router-dom';
import ScrollToTop from './ScrollToTop';
import Home from './Home';

function App() {
  return (
    <>
      <ScrollToTop />
      <Routes>
        <Route path="/home" element={<Home />} />
      </Routes>
    </>
  );
}
export default App;

// --- ScrollToTop.jsx (Child Component) ---
import { useEffect } from 'react';
import { useLocation } from 'react-router-dom';

const ScrollToTop = () => {
  // Hook to access the current location object
  const { pathname } = useLocation();

  useEffect(() => {
    // Scroll to top whenever the pathname changes
    window.scrollTo(0, 0);
  }, [pathname]);

  return null; // Renders nothing
};

export default ScrollToTop;
ยฉ 2026 ยท FixWins.com
07 / 09

๐ŸŸฃ Nested Routes & Outlet

LIVE

Layout Composition

COMPONENT Render Child Routes

Sidebar
Overview
Settings
Overview Content
Rendered via <Outlet />
๐Ÿ’ก
Place <Outlet /> in a parent layout component. React Router will render the matched child route in that spot.
OUTLET
// --- App.js (Parent) ---
import React from 'react';
import { Routes, Route } from 'react-router-dom';
import Dashboard from './Dashboard';
import Overview from './Overview';
import Settings from './Settings';

function App() {
  return (
    <Routes>
      <Route path="/dashboard" element={<Dashboard />}>
        <Route index element={<Overview />} />
        <Route path="settings" element={<Settings />} />
      </Route>
    </Routes>
  );
}
export default App;

// --- Dashboard.jsx (Parent Layout) ---
import React from 'react';
import { Outlet, NavLink } from 'react-router-dom';

const Dashboard = () => {
  return (
    <div className="dashboard-layout">
      <aside className="sidebar">
        <h3>Dashboard</h3>
        {/* Nested navigation */}
        <NavLink to="overview">Overview</NavLink>
        <NavLink to="settings">Settings</NavLink>
      </aside>
      
      <main className="content">
        {/* Renders the matched child route component */}
        <Outlet />
      </main>
    </div>
  );
};

export default Dashboard;
ยฉ 2026 ยท FixWins.com
08 / 09
โš› FixWins.com
CH05-S08 โœ“

๐ŸŽฏ Routing mastered!

You now know how to configure Routers, navigate declaratively and programmatically, read Params, and build Nested Layouts.
Next: State Management with Context & Redux

BrowserRouter useNavigate useParams Outlet
โ–ถ

Next: Context API

Global state management

๐Ÿ“

Previous: Props

Data flow & composition

ยฉ 2026 ยท FixWins.com
09 / 09
01 / 09