← Về danh sách bài họcBài 19/25

🗺️ Bài 19: React Router - Điều Hướng Trang

⏱️ Thời gian đọc: 15 phút | 📚 Độ khó: Trung bình

🎯 Sau bài học này, bạn sẽ:

1. Cài Đặt & Cấu Hình

npm install react-router-dom
import { 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