React Router
React Router nima?
React Router - bu React ilovalari uchun marshrutlash imkoniyatlarini ta’minlovchi kutubxona.
Marshrutlash turli ko‘rinishlar orasidagi navigatsiyani boshqarishni anglatadi.
React Router - bu React ilovalari uchun standart marshrutlash kutubxonasi. U sizga quyidagilarga imkon beradi:
- Bir sahifali ilovangizda bir nechta sahifa yarating
- URL parametrlari va so‘rov stringlarini boshqaring
- Brauzer tarixi va navigatsiyani boshqaring
- Ichki marshrutlar va tartiblarni yarating
- Autentifikatsiya uchun himoyalangan marshrutlarni amalga oshiring
Router bo‘lmasa, sizning React ilovangiz turli xil ko‘rinishlar o‘rtasida harakatlanish imkoni bo‘lmagan bitta sahifa bilan chegaralanadi.
React Routerni o‘rnating
Buyruqlar qatorida loyiha katalogingizga o‘ting va paketni o‘rnatish uchun quyidagi buyruqni bajaring:
npm install react-router-dom
Ilovangizni BrowserRouter bilan o‘rab oling
Marshrutlashni yoqish uchun ilovangiz BrowserRouter componenti bilan o‘ralgan bo‘lishi kerak:
function App() {
return (
<BrowserRouter>
{/* Your app content */}
</BrowserRouter>
);
}
Ko‘rishlar yaratish
Marshrutni ko‘rsatish uchun ilovamizda uchta sahifa (yoki ko‘rinish) yaratamiz: Uy, Haqida va Kontakt:
Oddiylik uchun biz uchta ko‘rinishni bitta faylda yaratamiz, lekin siz ularni alohida fayllarga bo‘lishingiz mumkin.
Misol
function Home() {
return <h1>Home Page</h1>;
}
function About() {
return <h1>About Page</h1>;
}
function Contact() {
return <h1>Contact Page</h1>;
}
Asosiy marshrutlash
React Router asosiy marshrutlash uchun uchta asosiy componentdan foydalanadi:
Link: URL manzilini yangilaydigan navigatsiya havolalarini yaratadiRoutes: Barcha marshrut ta’riflaringiz uchun konteynerRoute: URL yo‘li va komponent o‘rtasidagi moslikni belgilaydi
Har bir havola uchun navigatsiya havolalari va marshrutlarni qo‘shamiz:
Misol
E’tibor bering, biz "react-router-dom" dan BrowserRouter, Routes, Route, Link-ni import qilishimiz kerak.
import { BrowserRouter, Routes, Route, Link } from 'react-router-dom';
function Home() {
return <h1>Home Page</h1>;
}
function About() {
return <h1>About Page</h1>;
}
function Contact() {
return <h1>Contact Page</h1>;
}
function App() {
return (
<BrowserRouter>
{/* Navigation */}
<nav>
<Link to="/">Home</Link> |{" "}
<Link to="/about">About</Link> |{" "}
<Link to="/contact">Contact</Link>
</nav>
{/* Routes */}
<Routes>
<Route path="/" element={<Home />} />
<Route path="/about" element={<About />} />
<Route path="/contact" element={<Contact />} />
</Routes>
</BrowserRouter>
);
}
Ushbu misolda:
BrowserRouterilovangizni o‘rab oladi va marshrutlash funksiyasini yoqadiLinkcomponents create navigation linksRoutesvaRoutemarshrutlash konfiguratsiyangizni belgilaydi
O‘rnatilgan marshrutlar
Boshqa Route ichida Route bo‘lishi mumkin, bu ichki yo‘nalishlar deb ataladi.
O‘rnatilgan marshrutlar yangi URL manziliga o‘tganingizda sahifaning qismlarini o‘zgartirishga imkon beradi, boshqa qismlar esa o‘zgartirilmaydi yoki qayta yuklanmaydi, xuddi sahifa ichida sahifa bo‘lishi kabi.
Keling, yuqoridagi misoldan foydalanamiz va Products componentida ko‘rsatiladigan ikkita yangi componentni qo‘shamiz.
Biri CarProducts va biri BikeProducts deb ataladi:
Misol
Shuni ham yodda tutingki, biz Outlet componentini "react-router-dom" dan import qilishimiz kerak.
import { BrowserRouter, Routes, Route, Link, Outlet } from 'react-router-dom';
function Home() {
return <h1>Home Page</h1>;
}
function Products() {
return (
<div>
<h1>Products Page</h1>
<nav style={{ marginBottom: '20px' }}>
<Link to="/products/car">Cars</Link> |{" "}
<Link to="/products/bike">Bikes</Link>
</nav>
<Outlet />
</div>
);
}
function CarProducts() {
return (
<div>
<h2>Cars</h2>
<ul>
<li>Audi</li>
<li>BMW</li>
<li>Volvo</li>
</ul>
</div>
);
}
function BikeProducts() {
return (
<div>
<h2>Bikes</h2>
<ul>
<li>Yamaha</li>
<li>Suzuki</li>
<li>Honda</li>
</ul>
</div>
);
}
function Contact() {
return <h1>Contact Page</h1>;
}
function App() {
return (
<BrowserRouter>
{/* Navigation */}
<nav>
<Link to="/">Home</Link> |{" "}
<Link to="/products">Products</Link> |{" "}
<Link to="/contact">Contact</Link>
</nav>
{/* Routes */}
<Routes>
<Route path="/" element={<Home />} />
<Route path="/products" element={<Products />}>
<Route path="car" element={<CarProducts />} />
<Route path="bike" element={<BikeProducts />} />
</Route>
<Route path="/contact" element={<Contact />} />
</Routes>
</BrowserRouter>
);
}
Yuqoridagi misol haqida muhim eslatmalar:
- Outlet:
The<Outlet />element in theProductscomponent specifies where to render the child route’s content. - Routes:
TheRouteselement contains the routes toCarProductsandBikeProductsas child routes of theProductsparent route. - URL Structure:
The URL structure is relative to the parent route’s path. For example:
'/products/car'ga o‘tganingizda,CarProductscomponenti ko‘rsatiladi.'/products/bike'ga o‘tganingizda,BikeProductscomponenti ko‘rsatiladi.
Stil faol havolalar
Bog‘lanish componentining Nav deb nomlangan maxsus versiyasi mavjud bo‘lib, u havolaning URL manzili "faol" yoki yo‘qligini biladi.Link
NavLink ayniqsa quyidagilar uchun foydalidir:
- Navigatsiya menyulari
- Non bo‘laklari
- Yorliqlar
Joriy URL uning to propiga mos kelsa, NavLink faol hisoblanadi.
NavLink componenti faol havolalarni uslublashni osonlashtiradi.
Yuqoridagi asosiy misolni oling va NavLink yordamida faol havolalar uchun uslublarni qo‘shing:
Misol
navLinkStyles nomli yangi element yarating
va App da <Link> ni <NavLink> bilan almashtiring.
Shuni ham yodda tutingki, biz NavLink componentini "react-router-dom" dan import qilishimiz kerak.
import { BrowserRouter, Routes, Route, NavLink } from 'react-router-dom';
// Style function for active links
const navLinkStyles = ({ isActive }) => ({
color: isActive ? '#007bff' : '#333',
textDecoration: isActive ? 'none' : 'underline',
fontWeight: isActive ? 'bold' : 'normal',
padding: '5px 10px'
});
function Home() {
return <h1>Home Page</h1>;
}
function About() {
return <h1>About Page</h1>;
}
function Contact() {
return <h1>Contact Page</h1>;
}
function App() {
return (
<BrowserRouter>
{/* Navigation with NavLink for active styling */}
<nav style={{ marginBottom: '20px' }}>
<NavLink to="/" style={navLinkStyles}>Home</NavLink> |{" "}
<NavLink to="/about" style={navLinkStyles}>About</NavLink> |{" "}
<NavLink to="/contact" style={navLinkStyles}>Contact</NavLink>
</nav>
{/* Routes */}
<Routes>
<Route path="/" element={<Home />} />
<Route path="/about" element={<About />} />
<Route path="/contact" element={<Contact />} />
</Routes>
</BrowserRouter>
);
}
URL parametrlari
URL parametrlari marshrut yo‘llariga qo‘shishingiz mumkin bo‘lgan o‘zgaruvchilardir. Ular ko‘pincha componentlar o‘rtasida ma’lumotlarni uzatish uchun ishlatiladi.
http://localhost:5173/customer/ yo‘lida URL parametri Tobias.Tobias
URL parametrlari URLning bir qismi o‘zgarishi mumkin bo‘lgan dinamik marshrutlarni yaratish imkonini beradi. Ularni URL manzilingizdagi o‘zgaruvchilar sifatida tasavvur qiling.
React Router componentlaringizdagi ushbu parametrlarga kirish uchun useParams hookini taqdim etadi.
Turli mijozlarga salom aytishi mumkin bo‘lgan tabrik sahifasi bilan oddiy misol:
Misol
import { BrowserRouter, Routes, Route, Link, useParams } from 'react-router-dom';
function Info() {
const { firstname } = useParams();
return <h1>Hello, {firstname}!</h1>;
}
function App() {
return (
<BrowserRouter>
<nav>
<Link to="/customer/Emil">Emil</Link> |
<Link to="/customer/Tobias">Tobias</Link> |
<Link to="/customer/Linus">Linus</Link>
</nav>
<Routes>
<Route path="/customer/:firstname" element={<Info />} />
</Routes>
</BrowserRouter>
);
}
Ushbu misolda:
- Marshrut yo‘lidagi
:firstnameURL parametri - Agar
/customer/Emilmanziliga kirsangiz, "Hello, Emil" matnini ko‘rasiz - Agar
/customer/Tobiasmanziliga kirsangiz, "Hello, Tobias" matnini ko‘rasiz - Agar
/customer/Linusmanziliga kirsangiz, "Hello, Linus" matnini ko‘rasiz - Siz URL manzilida istalgan nomdan foydalanishingiz mumkin va salomlashuv ishlaydi!, buni sinab ko‘ring
http://localhost:5173/customer/John
W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!
