← Về danh sách bài họcBài 19/25
🗺️ Bài 19: React Router - Điều Hướng Trang
🎯 Sau bài học này, bạn sẽ:
- Cài đặt và cấu hình React Router v6
- Tạo routes, nested routes, dynamic params
- Sử dụng useNavigate, useParams, useSearchParams
- Xây dựng Protected Routes (auth guard)
1. Cài Đặt & Cấu Hình
npm install react-router-domimport { BrowserRouter, Routes, Route, Link, NavLink } from 'react-router-dom';
function App() {
return (
<BrowserRouter>
<nav>
<NavLink to="/" className={({isActive}) => isActive ? 'active' : ''}>Home</NavLink>
<NavLink to="/about">About</NavLink>
<NavLink to="/users">Users</NavLink>
</nav>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/about" element={<About />} />
<Route path="/users" element={<Users />} />
<Route path="/users/:id" element={<UserDetail />} />
<Route path="*" element={<NotFound />} />
</Routes>
</BrowserRouter>
);
}2. Dynamic Params & Navigation
import { useParams, useNavigate, useSearchParams } from 'react-router-dom';
function UserDetail() {
const { id } = useParams();
const navigate = useNavigate();
const [searchParams] = useSearchParams();
const tab = searchParams.get('tab') || 'profile';
return (
<div>
<h1>User #{id}</h1>
<p>Tab: {tab}</p>
<button onClick={() => navigate(-1)}>← Quay lại</button>
<button onClick={() => navigate('/users')}>Danh sách</button>
</div>
);
}3. Protected Routes
import { Navigate, Outlet } from 'react-router-dom';
function ProtectedRoute({ isAuthenticated }) {
if (!isAuthenticated) return <Navigate to="/login" replace />;
return <Outlet />;
}
// Sử dụng
<Routes>
<Route path="/login" element={<Login />} />
<Route element={<ProtectedRoute isAuthenticated={user !== null} />}>
<Route path="/dashboard" element={<Dashboard />} />
<Route path="/settings" element={<Settings />} />
</Route>
</Routes>📝 Tóm Tắt
BrowserRouter→Routes→Route- Dynamic:
/users/:id→useParams() - Navigation:
useNavigate(),<Link>,<NavLink> - Protected routes: wrapper component +
<Navigate>