O'zbek

React Router v6 bilan muhim navigatsiya naqshlarini o'rganing. Mustahkam va foydalanuvchiga qulay veb-ilovalar yaratish uchun deklarativ marshrutlash, dinamik marshrutlar, dasturiy navigatsiya, ichki marshrutlar va ma'lumotlarni yuklash strategiyalarini o'rganing.

React Router v6: Zamonaviy veb-ilovalar uchun navigatsiya naqshlarini o'zlashtirish

React Router v6 — bu React ilovalari uchun kuchli va moslashuvchan marshrutlash kutubxonasi. U to'liq sahifani qayta yuklamasdan navigatsiyani boshqarish orqali uzluksiz foydalanuvchi tajribasiga ega bo'lgan yagona sahifali ilovalarni (SPA) yaratishga imkon beradi. Ushbu blog posti React Router v6 yordamida muhim navigatsiya naqshlarini chuqur o'rganib chiqadi va sizga mustahkam hamda foydalanuvchiga qulay veb-ilovalar yaratish uchun bilim va misollar taqdim etadi.

React Router v6 Asosiy Konsepsiyalarini Tushunish

Muayyan naqshlarga sho'ng'ishdan oldin, keling, ba'zi fundamental tushunchalarni ko'rib chiqaylik:

1. <Routes> va <Route> bilan Deklarativ marshrutlash

React Router v6 ning asosi deklarativ marshrutlashda yotadi. Siz o'z marshrutlaringizni <Routes> va <Route> komponentlari yordamida belgilaysiz. <Routes> komponenti marshrutlaringiz uchun konteyner vazifasini bajaradi, <Route> komponenti esa ma'lum bir marshrutni va ushbu marshrut joriy URL ga mos kelganda render qilinadigan komponentni belgilaydi.

Misol: Asosiy Marshrut Konfiguratsiyasi

Quyida oddiy ilova uchun marshrutlarni sozlashning asosiy misoli keltirilgan:


import { BrowserRouter, Routes, Route } from "react-router-dom";
import Home from "./pages/Home";
import About from "./pages/About";
import Contact from "./pages/Contact";

function App() {
  return (
    
      
        } />
        } />
        } />
      
    
  );
}

export default App;

Ushbu misolda biz uchta marshrutni belgiladik:

BrowserRouter komponenti brauzer tarixiga asoslangan marshrutlashni yoqadi. React Router joriy URLni belgilangan marshrutlarga solishtiradi va mos keladigan komponentni render qiladi.

2. URL Parametrlari bilan Dinamik Marshrutlar

Dinamik marshrutlar sizga URL'dagi turli qiymatlarni qayta ishlay oladigan marshrutlar yaratishga imkon beradi. Bu mahsulot ID'si yoki foydalanuvchi ID'si kabi noyob identifikatorga asoslangan kontentni ko'rsatish uchun foydalidir. React Router v6 URL parametrlarini belgilash uchun : belgisidan foydalanadi.

Misol: Mahsulot Tafsilotlarini Ko'rsatish

Aytaylik, sizda elektron tijorat ilovasi bor va har bir mahsulot tafsilotlarini uning ID'siga qarab ko'rsatmoqchisiz. Siz shunday dinamik marshrutni belgilashingiz mumkin:


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

function ProductDetails() {
  const { productId } = useParams();

  // Fetch product details based on productId
  // ...

  return (
    

Product Details

Product ID: {productId}

{/* Display product details here */}
); } function App() { return ( } /> ); } export default App;

Ushbu misolda:

Xalqarolashtirish Misoli: Til Kodlarini Boshqarish

Ko'p tilli veb-sayt uchun til kodlarini boshqarish uchun dinamik marshrutdan foydalanishingiz mumkin:


} />

Ushbu marshrut /en/about, /fr/about, va /es/about kabi URL'larga mos keladi. Keyin lang parametri tegishli til resurslarini yuklash uchun ishlatilishi mumkin.

3. useNavigate bilan Dasturiy Navigatsiya

Deklarativ marshrutlash statik havolalar uchun ajoyib bo'lsa-da, ko'pincha foydalanuvchi harakatlari yoki ilova mantig'iga asoslanib dasturiy ravishda navigatsiya qilish kerak bo'ladi. React Router v6 bu maqsadda useNavigate hookini taqdim etadi. useNavigate turli marshrutlarga o'tish imkonini beruvchi funksiyani qaytaradi.

Misol: Shakl Yuborilgandan Keyin Yo'naltirish

Aytaylik, sizda shakl yuborish amali bor va shakl muvaffaqiyatli yuborilgandan so'ng foydalanuvchini muvaffaqiyat sahifasiga yo'naltirmoqchisiz:


import { useNavigate } from "react-router-dom";

function MyForm() {
  const navigate = useNavigate();

  const handleSubmit = async (event) => {
    event.preventDefault();

    // Submit the form data
    // ...

    // Redirect to the success page after successful submission
    navigate("/success");
  };

  return (
    
{/* Form fields */}
); } export default MyForm;

Ushbu misolda:

Navigatsiya Paytida Holatni (State) Uzatish

Shuningdek, navigate funksiyasining ikkinchi argumenti yordamida navigatsiya bilan birga holatni (state) ham uzatishingiz mumkin:


navigate("/confirmation", { state: { orderId: "12345" } });

Bu sizga ma'lumotlarni maqsad komponentga uzatish imkonini beradi, unga useLocation hooki yordamida kirish mumkin.

4. Ichki Marshrutlar va Maketlar (Layouts)

Ichki marshrutlar sizga ierarxik marshrutlash tuzilmalarini yaratishga imkon beradi, bunda bir marshrut boshqasining ichida joylashadi. Bu ko'p darajali navigatsiyaga ega murakkab ilovalarni tashkil qilish uchun foydalidir. Bu, shuningdek, ilovaning bir qismi bo'ylab muayyan UI elementlari doimiy ravishda mavjud bo'lgan maketlarni yaratishga yordam beradi.

Misol: Foydalanuvchi Profili Bo'limi

Aytaylik, sizda foydalanuvchining profil ma'lumotlari, sozlamalari va buyurtmalarini ko'rsatish uchun ichki marshrutlarga ega bo'lgan foydalanuvchi profili bo'limi mavjud:


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

function Profile() {
  return (
    

User Profile

  • Profile Information
  • Settings
  • Orders
} /> } /> } />
); } function ProfileInformation() { return

Profile Information Component

; } function Settings() { return

Settings Component

; } function Orders() { return

Orders Component

; } function App() { return ( } /> ); } export default App;

Ushbu misolda:

Ota-ona marshrutidagi * belgisi juda muhim; u ota-ona marshruti har qanday ichki yo'lga mos kelishi kerakligini bildiradi, bu esa ichki marshrutlarning Profile komponenti ichida to'g'ri mos kelishiga imkon beradi.

5. "Topilmadi" (404) Xatolarini Boshqarish

Foydalanuvchi mavjud bo'lmagan marshrutga o'tgan holatlarni boshqarish muhimdir. React Router v6 buni hamma narsani qamrab oluvchi marshrut bilan osonlashtiradi.

Misol: 404 Sahifasini Amalga Oshirish


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

function NotFound() {
  return (
    

404 - Not Found

The page you are looking for does not exist.

Go back to home
); } function App() { return ( } /> } /> } /> ); }

Ushbu misolda:

6. React Router v6 bilan Ma'lumotlarni Yuklash Strategiyalari

React Router v6 o'zidan oldingi versiya (React Router v5 `useRouteMatch` bilan) kabi o'rnatilgan ma'lumotlarni yuklash mexanizmlarini o'z ichiga olmaydi. Biroq, u turli ma'lumotlarni yuklash strategiyalarini samarali amalga oshirish uchun vositalarni taqdim etadi.

1-variant: Komponentlarda Ma'lumotlarni Olish

Eng oddiy yondashuv - bu ma'lumotlarni marshrutni render qiladigan komponentning o'zida olishdir. Siz komponent o'rnatilganda yoki URL parametrlari o'zgarganda ma'lumotlarni olish uchun useEffect hookidan foydalanishingiz mumkin.


import { useParams } from "react-router-dom";
import { useEffect, useState } from "react";

function ProductDetails() {
  const { productId } = useParams();
  const [product, setProduct] = useState(null);
  const [loading, setLoading] = useState(true);
  const [error, setError] = useState(null);

  useEffect(() => {
    async function fetchProduct() {
      try {
        const response = await fetch(`/api/products/${productId}`);
        if (!response.ok) {
          throw new Error(`HTTP error! status: ${response.status}`);
        }
        const data = await response.json();
        setProduct(data);
        setLoading(false);
      } catch (e) {
        setError(e);
        setLoading(false);
      }
    }

    fetchProduct();
  }, [productId]);

  if (loading) return 

Loading...

; if (error) return

Error: {error.message}

; if (!product) return

Product not found

; return (

{product.name}

{product.description}

); } export default ProductDetails;

Ushbu yondashuv tushunarli, lekin agar siz bir nechta komponentda ma'lumotlarni olishingiz kerak bo'lsa, kod takrorlanishiga olib kelishi mumkin. Shuningdek, u kamroq samarali, chunki ma'lumotlarni yuklash faqat komponent o'rnatilgandan so'ng boshlanadi.

2-variant: Ma'lumotlarni Yuklash uchun Maxsus Hookdan Foydalanish

Kod takrorlanishini kamaytirish uchun siz ma'lumotlarni yuklash mantig'ini o'z ichiga olgan maxsus hook yaratishingiz mumkin. Keyin bu hookni bir nechta komponentda qayta ishlatish mumkin.


import { useState, useEffect } from "react";

function useFetch(url) {
  const [data, setData] = useState(null);
  const [loading, setLoading] = useState(true);
  const [error, setError] = useState(null);

  useEffect(() => {
    async function fetchData() {
      try {
        const response = await fetch(url);
        if (!response.ok) {
          throw new Error(`HTTP error! status: ${response.status}`);
        }
        const json = await response.json();
        setData(json);
        setLoading(false);
      } catch (e) {
        setError(e);
        setLoading(false);
      }
    }

    fetchData();
  }, [url]);

  return { data, loading, error };
}

export default useFetch;

Keyin, siz ushbu hookni o'z komponentlaringizda ishlatishingiz mumkin:


import { useParams } from "react-router-dom";
import useFetch from "./useFetch";

function ProductDetails() {
  const { productId } = useParams();
  const { data: product, loading, error } = useFetch(`/api/products/${productId}`);

  if (loading) return 

Loading...

; if (error) return

Error: {error.message}

; if (!product) return

Product not found

; return (

{product.name}

{product.description}

); } export default ProductDetails;

3-variant: Ma'lumotlarni Yuklash Imkoniyatlariga Ega Bo'lgan Marshrutlash Kutubxonasidan Foydalanish (TanStack Router, Remix)

TanStack Router va Remix kabi kutubxonalar marshrutlash bilan uzviy bog'langan o'rnatilgan ma'lumotlarni yuklash mexanizmlarini taklif qiladi. Ushbu kutubxonalar ko'pincha quyidagi xususiyatlarni taqdim etadi:

Bunday kutubxonadan foydalanish ma'lumotlarni yuklashni sezilarli darajada soddalashtirishi va, ayniqsa, murakkab ilovalar uchun unumdorlikni oshirishi mumkin.

Server Tomonida Renderlash (SSR) va Statik Sayt Generatsiyasi (SSG)

Yaxshilangan SEO va dastlabki yuklash unumdorligi uchun Next.js yoki Gatsby kabi freymvorklar bilan SSR yoki SSG dan foydalanishni o'ylab ko'ring. Bu freymvorklar sizga serverda yoki qurish vaqtida ma'lumotlarni yuklash va mijozga oldindan render qilingan HTMLni taqdim etish imkonini beradi. Bu mijozning dastlabki yuklashda ma'lumotlarni yuklash zaruratini yo'q qiladi, natijada tezroq va SEO uchun qulayroq tajriba taqdim etiladi.

7. Turli xil Router Turlari bilan Ishlash

React Router v6 turli muhitlar va foydalanish holatlariga mos keladigan turli xil router implementatsiyalarini taqdim etadi:

Ilovangizning talablari va muhitiga eng mos keladigan router turini tanlang.

Xulosa

React Router v6 React ilovalari uchun keng qamrovli va moslashuvchan marshrutlash yechimini taqdim etadi. Ushbu blog postida muhokama qilingan navigatsiya naqshlarini tushunish va qo'llash orqali siz mustahkam, foydalanuvchiga qulay va saqlashga oson veb-ilovalarni yaratishingiz mumkin. <Routes> va <Route> bilan deklarativ marshrutlashdan tortib, URL parametrlari bilan dinamik marshrutlar, useNavigate bilan dasturiy navigatsiya va samarali ma'lumotlarni yuklash strategiyalarigacha, React Router v6 sizga foydalanuvchilaringiz uchun uzluksiz navigatsiya tajribalarini yaratish imkoniyatini beradi. Yanada ko'proq nazorat va unumdorlikni optimallashtirish uchun ilg'or marshrutlash kutubxonalari va SSR/SSG freymvorklarini o'rganib chiqishni o'ylab ko'ring. Ushbu naqshlarni o'zingizning ilovangiz talablariga moslashtirishni va har doim aniq va intuitiv foydalanuvchi tajribasini birinchi o'ringa qo'yishni unutmang.