Barcha kurslar Yo'nalishlar Reyting Kirish Ro'yxatdan o'tish

Bu modulda bir sahifali ilovaga "sahifalar" qo’shish o’rganildi: React Router DOM.

Muammo va yechim

SPA’da brauzer bitta HTML oladi — oddiy <a href> bosilsa butun ilova qayta yuklanadi va state yo’qoladi. React Router URL’ni kuzatib, unga mos komponentni almashtiradi — yuklanishsiz.

import { BrowserRouter, Routes, Route } from "react-router-dom";

<BrowserRouter>
  <Routes>
    <Route path="/" element={<Home />} />
    <Route path="/kurslar" element={<Kurslar />} />
  </Routes>
</BrowserRouter>

Natija: / da Home, /kurslarda Kurslar komponenti — sahifa qayta yuklanmasdan.

Link va NavLink

Ichki o’tishlar uchun <a> emas, Link ishlatiladi:

<Link to="/kurslar">Kurslar</Link>
<NavLink to="/kurslar">Kurslar</NavLink>

NavLink — menyu uchun Link: joriy sahifaga mos kelsa avtomatik active class oladi, uni CSS’da bezash kifoya.

Tipik xato. Odat bo’yicha <a href="/kurslar"> yozish — ishlagandek ko’rinadi, lekin har bosishda ilova to’liq qayta yuklanadi. Ichki yo’llar — faqat Link/NavLink.

Dynamic route va useParams

Har maqolaga alohida Route yozilmaydi — URL’ning bir qismi parametr bo’ladi:

<Route path="/maqola/:id" element={<MaqolaDetail />} />

function MaqolaDetail() {
  const { id } = useParams();
  const { data } = useFetch(`http://localhost:8000/articles/${id}`);
  // ...
}

Natija: /maqola/3 ochilsa id = "3" — o’sha maqola serverdan olinadi. Ro’yxatdan detail sahifaga o’tish: <Link to={/maqola/${article.id}}>.

Nested Route va Layout

Bo’limning umumiy qismi (sarlavha, yon menyu) layout komponentga chiqariladi; ichki sahifalar uning <Outlet /> joyiga chiziladi:

<Route path="/maqolalar" element={<ArticlesLayout />}>
  <Route index element={<ArticlesList />} />
  <Route path=":id" element={<MaqolaDetail />} />
</Route>

index — ota yo’lning "o’z sahifasi". Breadcrumbs ("yo’l" navigatsiyasi) ham shu daraxtdan quriladi: joriy URL bo’laklariga qarab Link’lar zanjiri chiqariladi.

404 va xatolar

<Route path="*" element={<PageNotFound />} />

* — yuqoridagilarning hech biriga tushmagan barcha manzillar. Router’ning obyekt versiyasida (createBrowserRouter) esa xato sahifasi errorElement bilan beriladi va useRouteError() hook’i xato tafsilotini o’qiydi.

Routes — obyekt versiyasi

Yangi versiyalarda marshrutlarni JSX o’rniga obyekt massivi bilan berish ham mumkin: createBrowserRouter([{ path: "/", element: <Home /> }, ...]) + RouterProvider. Mantiq o’sha — yozuv shakli boshqa; kursda ikkala shakl ham ko’rsatilgan, hujjatlashda ko’proq obyekt shakli uchraydi.

Amaliyot

  1. Uch sahifali ilova yig’ing (Bosh, Maqolalar, Aloqa) — NavLink menyu bilan, active holatni bezang.
  2. Maqolalar ro’yxatidan /maqola/:id detail sahifaga o’tishni qo’shing (useParams + useFetch).
  3. ArticlesLayout yasab, ro’yxat va detail’ni nested route qiling.
  4. path="*" bilan 404 sahifa qo’shing va unda "Bosh sahifaga qaytish" Link’i bering.
  5. Ilovani obyekt-versiya router’ga ko’chirib chiqing.

Modul testini ishlang — oxirgi modulda hammasi uchta amaliy loyihada birlashadi.

React Router — konspekt

React Router Maqola

SPA routing: Route, Link/NavLink, nested route, useParams, 404 va breadcrumbs — modul konspekti.

Eslatma yozish uchun saytga kiring.

Resurslar hozircha qo'shilmagan

O'qituvchi dars uchun qo'shimcha materiallarni qo'shganida shu yerda paydo bo'ladi.

Savol berish uchun saytga kiring.

Hozircha savollar yo'q

Bu dars yuzasidan birinchi savolni siz bering.