React Router Tutorial
React Router is a powerful library for managing navigation in React applications. With the release of v6, it has become even simpler and more performant. This tutorial will guide you through installing, using basic and nested routes, and handling parameters — all using real code examples formatted for practical learning.
📦 First Install
To install React Router:
npm install react-router-dom --save
🔁 Basic Routing
import React from "react";
import {
BrowserRouter as Router,
Routes,
Route,
Link
} from "react-router-dom";
export default function Layout() {
return (
<Router>
<div>
<ul>
<li><Link to="/">Home</Link></li>
<li><Link to="/about">About</Link></li>
<li><Link to="/dashboard">Dashboard</Link></li>
</ul>
<hr />
<Routes>
<Route path="/" element={<Home />} />
<Route path="/about" element={<About />} />
<Route path="/dashboard" element={<Dashboard />} />
</Routes>
</div>
</Router>
);
}
function Home() {
return <h2>Home</h2>;
}
function About() {
return <h2>About</h2>;
}
function Dashboard() {
return <h2>Dashboard</h2>;
}
🔢 Passing Parameters (Dynamic Routes)
import React from "react";
import {
BrowserRouter as Router,
Routes,
Route,
Link,
useParams
} from "react-router-dom";
export default function ParamsExample() {
return (
<Router>
<div>
<h2>Accounts</h2>
<ul>
<li><Link to="/netflix">Netflix</Link></li>
<li><Link to="/zillow-group">Zillow Group</Link></li>
<li><Link to="/yahoo">Yahoo</Link></li>
<li><Link to="/modus-create">Modus Create</Link></li>
</ul>
<Routes>
<Route path="/:id" element={<Child />} />
</Routes>
</div>
</Router>
);
}
function Child() {
let { id } = useParams();
return <h3>ID: {id}</h3>;
}
🧩 Nested Routes
import React from "react";
import {
BrowserRouter as Router,
Routes,
Route,
Link,
Outlet,
useParams
} from "react-router-dom";
const BlogPosts = {
'1': {
title: 'First Blog Post',
description: 'Lorem ipsum dolor sit amet.'
},
'2': {
title: 'Second Blog Post',
description: 'Hello React Router v6'
}
};
function Home() {
return (
<div style={{ padding: 20 }}>
<h2>Home View</h2>
</div>
);
}
function About() {
return (
<div style={{ padding: 20 }}>
<h2>About View</h2>
</div>
);
}
function Posts() {
return (
<div style={{ padding: 20 }}>
<h2>Blog</h2>
<Outlet />
</div>
);
}
function PostLists() {
return (
<ul>
{Object.entries(BlogPosts).map(([slug, { title }]) => (
<li key={slug}>
<Link to={`/posts/${slug}`}>
<h3>{title}</h3>
</Link>
</li>
))}
</ul>
);
}
function Post() {
const { slug } = useParams();
const post = BlogPosts[slug];
const { title, description } = post;
return (
<div style={{ padding: 20 }}>
<h3>{title}</h3>
<p>{description}</p>
</div>
);
}
function App() {
return (
<Router>
<nav style={{ margin: 10 }}>
<Link to="/" style={{ padding: 5 }}>Home</Link>
<Link to="/about" style={{ padding: 5 }}>About</Link>
<Link to="/posts/" style={{ padding: 5 }}>Posts</Link>
</nav>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/about" element={<About />} />
<Route path="posts" element={<Posts />}>
<Route path="/posts" element={<PostLists />} />
<Route path=":slug" element={<Post />} />
</Route>
</Routes>
</Router>
);
}
export default App;
✅ Summary
React Router v6 is a modern routing solution for React that uses a declarative and intuitive API. It enables:
- Simple route definitions with
<Routes>
and<Route>
- Dynamic routing using
useParams()
- Support for nested routing and layouts using
<Outlet>
This version focuses on simplicity, performance, and scalability — making it the go-to router for single-page applications (SPAs) in React.