React Router үндэс
Одоо хэр бид нэг хуудаст апп хийсэн. Жинхэнэ вэбсайт олон хуудастай байдаг — нүүр хуудас, профайл хуудас, тохиргоо гэх мэт. React Router нь React аппд хэд хэдэн хуудас нэмэх стандарт хэрэгсэл. Суурилуулснаар аппаа бодит вэбсайт болгоно!
React Router суулгах
npm install react-router-dom
React Router v6+ ашиглана — одоогийн хамгийн шинэ хувилбар.
Үндсэн concept-ууд
React Router-н гол concept-ууд:
- BrowserRouter — router-н "хайрцаг", аппыг бүхэлд нь боодог
- Routes — route-уудын жагсаалт
- Route — нэг тодорхой URL path-ийг component-тэй холбодог
- Link — хуудас солих холбоос (
<a>тэмдэглэгээний оронд) - NavLink — идэвхтэй route-г автоматаар highlight хийдэг Link
import { BrowserRouter, Routes, Route, Link, NavLink } from "react-router-dom";
// Хуудасны component-ууд
function Home() {
return <h1>Нүүр хуудас</h1>;
}
function About() {
return <h1>Бидний тухай</h1>;
}
function Contact() {
return <h1>Холбоо барих</h1>;
}
export default function App() {
return (
<BrowserRouter>
{/* Navigation */}
<nav style={{ display: "flex", gap: "16px", padding: "16px" }}>
<NavLink
to="/"
style={({ isActive }) => ({ color: isActive ? "blue" : "black" })}
>
Нүүр
</NavLink>
<NavLink
to="/about"
style={({ isActive }) => ({ color: isActive ? "blue" : "black" })}
>
Бидний тухай
</NavLink>
<NavLink
to="/contact"
style={({ isActive }) => ({ color: isActive ? "blue" : "black" })}
>
Холбоо барих
</NavLink>
</nav>
{/* URL-г харж тохирох component-ийг харуулна */}
<Routes>
<Route path="/" element={<Home />} />
<Route path="/about" element={<About />} />
<Route path="/contact" element={<Contact />} />
</Routes>
</BrowserRouter>
);
}
Layout route ба Outlet
Navbar, footer зэрэг хуудас дундаа хуваалцах хэсгүүдийг Layout route ашиглан нэг удаа л бичнэ:
import { Outlet, Link } from "react-router-dom";
// Layout component — Outlet нь child route-г харуулна
function Layout() {
return (
<div>
<header style={{ background: "#1e293b", padding: "16px" }}>
<nav style={{ display: "flex", gap: "16px" }}>
<Link to="/" style={{ color: "white" }}>
Нүүр
</Link>
<Link to="/courses" style={{ color: "white" }}>
Сургалтууд
</Link>
<Link to="/profile" style={{ color: "white" }}>
Профайл
</Link>
</nav>
</header>
<main style={{ padding: "24px" }}>
{/* Child route-н component энд гарна */}
<Outlet />
</main>
<footer
style={{ background: "#f1f5f9", padding: "16px", textAlign: "center" }}
>
<p>© 2025 Миний апп</p>
</footer>
</div>
);
}
function App() {
return (
<BrowserRouter>
<Routes>
{/* Layout нь parent route */}
<Route path="/" element={<Layout />}>
{/* index — "/" path-д харагдах component */}
<Route index element={<Home />} />
<Route path="courses" element={<Courses />} />
<Route path="profile" element={<Profile />} />
</Route>
</Routes>
</BrowserRouter>
);
}
<Outlet /> нь child route-н component-ийг харуулдаг placeholder юм. Layout нэг удаа л бичигддэг, агуулга нь хуудас солигдох бүрт өөрчлөгдөнө.
404 хуудас нэмэх
Тохирох route олдохгүй үед харуулах хуудас:
function NotFound() {
return (
<div style={{ textAlign: "center", padding: "40px" }}>
<h1>404</h1>
<p>Хуудас олдсонгүй 😔</p>
<Link to="/">Нүүр хуудас руу буцах</Link>
</div>
);
}
function App() {
return (
<BrowserRouter>
<Routes>
<Route path="/" element={<Layout />}>
<Route index element={<Home />} />
<Route path="courses" element={<Courses />} />
{/* * нь бусад бүх path-г барина */}
<Route path="*" element={<NotFound />} />
</Route>
</Routes>
</BrowserRouter>
);
}
useNavigate hook
Товч дарах, form submit хийх зэрэг үйлдлийн дараа программчлан хуудас солих:
import { useNavigate } from "react-router-dom";
function LoginForm() {
const navigate = useNavigate();
async function handleSubmit(e) {
e.preventDefault();
// нэвтрэх логик...
const success = await login(email, password);
if (success) {
navigate("/dashboard"); // амжилттай бол dashboard руу явна
}
}
return (
<form onSubmit={handleSubmit}>
{/* ... */}
<button type="submit">Нэвтрэх</button>
</form>
);
}
Дараагийн хичээлд:
Dynamic маршрут ба params сурна — URL-д өөрчлөгдөх хэсэг байх (/courses/:id гэх мэт) тохиолдолд хэрхэн ажиллахыг ойлгоно. useParams hook ашиглан URL-с өгөгдөл уншихыг эзэмшинэ.