1. Installing React Router
npm install react-router-dom
2. Basic Setup
In your index.js file, wrap your app with BrowserRouter:
import React from "react";
import ReactDOM from "react-dom/client";
import { BrowserRouter } from "react-router-dom";
import App from "./App";
const root = ReactDOM.createRoot(document.getElementById("root"));
root.render(
  <BrowserRouter>
    <App />
  </BrowserRouter>
);
3. Defining Routes in App
Use Routes and Route:
import { Routes, Route, Link } from "react-router-dom";
import Home from "./pages/Home";
import About from "./pages/About";
function App() {
  return (
    <div>
      <nav>
        <Link to="/">Home</Link> |{" "}
        <Link to="/about">About</Link>
      </nav>
      <Routes>
        <Route path="/" element={<Home />} />
        <Route path="/about" element={<About />} />
      </Routes>
    </div>
  );
}
export default App;
4. Nested Routes Example
Imagine you have a Dashboard with sub-routes.
import { Routes, Route, Link, Outlet } from "react-router-dom";
function Dashboard() {
  return (
    <div>
      <h2>Dashboard</h2>
      <nav>
        <Link to="profile">Profile</Link> |{" "}
        <Link to="settings">Settings</Link>
      </nav>
      {/* Outlet renders nested route components */}
      <Outlet />
    </div>
  );
}
function Profile() {
  return <h3>User Profile</h3>;
}
function Settings() {
  return <h3>Account Settings</h3>;
}
function App() {
  return (
    <Routes>
      <Route path="/" element={<h1>Home</h1>} />
      <Route path="dashboard" element={<Dashboard />}>
        <Route path="profile" element={<Profile />} />
        <Route path="settings" element={<Settings />} />
      </Route>
    </Routes>
  );
}
export default App;
🔑 Key Idea:
- Outlet is where nested child routes render.
- You can have as many nested levels as needed.