मराठी

रियाक्ट राउटर v6 सह आवश्यक नेव्हिगेशन पॅटर्न्स एक्सप्लोर करा. मजबूत आणि वापरकर्त्यासाठी अनुकूल वेब ॲप्लिकेशन्स तयार करण्यासाठी डिक्लरेटिव्ह राउटिंग, डायनॅमिक रूट्स, प्रोग्रॅमॅटिक नेव्हिगेशन, नेस्टेड रूट्स आणि डेटा लोडिंग स्ट्रॅटेजीज शिका.

रियाक्ट राउटर v6: आधुनिक वेब ॲप्ससाठी नेव्हिगेशन पॅटर्न्समध्ये प्रभुत्व मिळवा

रियाक्ट राउटर v6 ही रियाक्ट ॲप्लिकेशन्ससाठी एक शक्तिशाली आणि लवचिक राउटिंग लायब्ररी आहे. हे तुम्हाला पूर्ण पेज रीलोडशिवाय नेव्हिगेशन व्यवस्थापित करून अखंड वापरकर्ता अनुभवासह सिंगल-पेज ॲप्लिकेशन्स (SPAs) तयार करण्याची परवानगी देते. हा ब्लॉग पोस्ट रियाक्ट राउटर v6 वापरून आवश्यक नेव्हिगेशन पॅटर्न्सवर सखोल माहिती देईल, जे तुम्हाला मजबूत आणि वापरकर्त्यासाठी अनुकूल वेब ॲप्लिकेशन्स तयार करण्यासाठी ज्ञान आणि उदाहरणे प्रदान करेल.

रियाक्ट राउटर v6 च्या मुख्य संकल्पना समजून घेणे

विशिष्ट पॅटर्न्समध्ये जाण्यापूर्वी, चला काही मूलभूत संकल्पनांचा आढावा घेऊया:

1. <Routes> आणि <Route> सह डिक्लरेटिव्ह राउटिंग

रियाक्ट राउटर v6 चा पाया डिक्लरेटिव्ह राउटिंगमध्ये आहे. तुम्ही तुमचे रूट्स <Routes> आणि <Route> कंपोनंट्स वापरून परिभाषित करता. <Routes> कंपोनंट तुमच्या रूट्ससाठी कंटेनर म्हणून काम करतो आणि <Route> कंपोनंट एक विशिष्ट रूट आणि वर्तमान URL शी जुळल्यावर रेंडर होणारा कंपोनंट परिभाषित करतो.

उदाहरण: बेसिक रूट कॉन्फिगरेशन

येथे एका साध्या ॲप्लिकेशनसाठी रूट्स सेट करण्याचे एक मूलभूत उदाहरण आहे:


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;

या उदाहरणात, आम्ही तीन रूट्स परिभाषित करतो:

BrowserRouter कंपोनंट ब्राउझर हिस्ट्री-आधारित राउटिंग सक्षम करतो. रियाक्ट राउटर वर्तमान URL ला परिभाषित रूट्सशी जुळवतो आणि संबंधित कंपोनंट रेंडर करतो.

2. URL पॅरामीटर्ससह डायनॅमिक रूट्स

डायनॅमिक रूट्स तुम्हाला असे रूट्स तयार करण्याची परवानगी देतात जे URL मधील भिन्न मूल्ये हाताळू शकतात. हे उत्पादन आयडी किंवा वापरकर्ता आयडी यांसारख्या युनिक आयडेंटिफायरवर आधारित सामग्री प्रदर्शित करण्यासाठी उपयुक्त आहे. रियाक्ट राउटर v6 URL पॅरामीटर्स परिभाषित करण्यासाठी : चिन्ह वापरतो.

उदाहरण: उत्पादन तपशील प्रदर्शित करणे

समजा तुमच्याकडे एक ई-कॉमर्स ॲप्लिकेशन आहे आणि तुम्हाला प्रत्येक उत्पादनाचा तपशील त्याच्या आयडीवर आधारित प्रदर्शित करायचा आहे. तुम्ही अशा प्रकारे एक डायनॅमिक रूट परिभाषित करू शकता:


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

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

  // productId वर आधारित उत्पादनाचा तपशील फेच करा
  // ...

  return (
    

उत्पादन तपशील

उत्पादन आयडी: {productId}

{/* येथे उत्पादनाचा तपशील प्रदर्शित करा */}
); } function App() { return ( } /> ); } export default App;

या उदाहरणात:

आंतरराष्ट्रीयीकरणाचे उदाहरण: भाषा कोड हाताळणे

एका बहुभाषिक वेबसाइटसाठी, तुम्ही भाषा कोड हाताळण्यासाठी डायनॅमिक रूट वापरू शकता:


} />

हा रूट /en/about, /fr/about, आणि /es/about सारख्या URL शी जुळेल. lang पॅरामीटर नंतर योग्य भाषेची संसाधने लोड करण्यासाठी वापरला जाऊ शकतो.

3. useNavigate सह प्रोग्रॅमॅटिक नेव्हिगेशन

स्थिर लिंक्ससाठी डिक्लरेटिव्ह राउटिंग उत्तम असले तरी, तुम्हाला अनेकदा वापरकर्त्याच्या कृती किंवा ॲप्लिकेशन लॉजिकवर आधारित प्रोग्रॅमॅटिकली नेव्हिगेट करण्याची आवश्यकता असते. रियाक्ट राउटर v6 या उद्देशासाठी useNavigate हुक प्रदान करतो. useNavigate एक फंक्शन परत करतो जे तुम्हाला वेगवेगळ्या रूट्सवर नेव्हिगेट करण्याची परवानगी देते.

उदाहरण: फॉर्म सबमिशननंतर रिडायरेक्ट करणे

समजा तुमच्याकडे एक फॉर्म सबमिशन आहे आणि फॉर्म यशस्वीरित्या सबमिट झाल्यावर वापरकर्त्याला सक्सेस पेजवर रिडायरेक्ट करायचे आहे:


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

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

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

    // फॉर्म डेटा सबमिट करा
    // ...

    // यशस्वी सबमिशननंतर सक्सेस पेजवर रिडायरेक्ट करा
    navigate("/success");
  };

  return (
    
{/* फॉर्म फील्ड्स */}
); } export default MyForm;

या उदाहरणात:

नेव्हिगेशन दरम्यान स्टेट पास करणे

तुम्ही navigate च्या दुसऱ्या आर्ग्युमेंटचा वापर करून नेव्हिगेशनसोबत स्टेट देखील पास करू शकता:


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

हे तुम्हाला टार्गेट कंपोनंटला डेटा पास करण्याची परवानगी देते, जो useLocation हुक वापरून ॲक्सेस केला जाऊ शकतो.

4. नेस्टेड रूट्स आणि लेआउट्स

नेस्टेड रूट्स तुम्हाला श्रेणीबद्ध राउटिंग संरचना तयार करण्याची परवानगी देतात, जिथे एक रूट दुसऱ्यामध्ये नेस्ट केलेला असतो. हे एकाधिक स्तरांच्या नेव्हिगेशनसह जटिल ॲप्लिकेशन्स आयोजित करण्यासाठी उपयुक्त आहे. हे असे लेआउट तयार करण्यात मदत करते जिथे काही UI घटक ॲप्लिकेशनच्या एका विभागात सातत्याने उपस्थित असतात.

उदाहरण: युझर प्रोफाइल विभाग

समजा तुमच्याकडे युझर प्रोफाइल विभाग आहे ज्यामध्ये वापरकर्त्याची प्रोफाइल माहिती, सेटिंग्ज आणि ऑर्डर्स प्रदर्शित करण्यासाठी नेस्टेड रूट्स आहेत:


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

function Profile() {
  return (
    

युझर प्रोफाइल

  • प्रोफाइल माहिती
  • सेटिंग्ज
  • ऑर्डर्स
} /> } /> } />
); } function ProfileInformation() { return

प्रोफाइल माहिती कंपोनंट

; } function Settings() { return

सेटिंग्ज कंपोनंट

; } function Orders() { return

ऑर्डर्स कंपोनंट

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

या उदाहरणात:

पॅरेंट रूटमधील * महत्त्वपूर्ण आहे; हे सूचित करते की पॅरेंट रूटने कोणत्याही सब-पाथशी जुळले पाहिजे, ज्यामुळे नेस्टेड रूट्स Profile कंपोनंटमध्ये योग्यरित्या जुळतील.

5. "नॉट फाउंड" (404) त्रुटी हाताळणे

जेव्हा वापरकर्ता अशा रूटवर नेव्हिगेट करतो जो अस्तित्वात नाही, तेव्हा अशा प्रकरणांना हाताळणे आवश्यक आहे. रियाक्ट राउटर v6 हे कॅच-ऑल रूटसह सोपे करतो.

उदाहरण: 404 पेज लागू करणे


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

function NotFound() {
  return (
    

404 - नॉट फाउंड

तुम्ही शोधत असलेले पेज अस्तित्वात नाही.

होमवर परत जा
); } function App() { return ( } /> } /> } /> ); }

या उदाहरणात:

6. रियाक्ट राउटर v6 सह डेटा लोडिंग स्ट्रॅटेजीज

रियाक्ट राउटर v6 मध्ये त्याच्या पूर्ववर्ती (रियाक्ट राउटर v5 `useRouteMatch` सह) सारखे अंगभूत डेटा लोडिंग मेकॅनिझम समाविष्ट नाहीत. तथापि, ते विविध डेटा लोडिंग स्ट्रॅटेजीज प्रभावीपणे लागू करण्यासाठी साधने प्रदान करते.

पर्याय 1: कंपोनंट्समध्ये डेटा फेच करणे

सर्वात सोपा दृष्टिकोन म्हणजे रूट रेंडर करणाऱ्या कंपोनंटमध्ये थेट डेटा फेच करणे. तुम्ही कंपोनंट माउंट झाल्यावर किंवा URL पॅरामीटर्स बदलल्यावर डेटा फेच करण्यासाठी useEffect हुक वापरू शकता.


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 

लोड होत आहे...

; if (error) return

त्रुटी: {error.message}

; if (!product) return

उत्पादन सापडले नाही

; return (

{product.name}

{product.description}

); } export default ProductDetails;

हा दृष्टिकोन सरळ आहे परंतु जर तुम्हाला एकाधिक कंपोनंट्समध्ये डेटा फेच करण्याची आवश्यकता असेल तर कोड डुप्लिकेशन होऊ शकते. हे कमी कार्यक्षम देखील आहे कारण डेटा फेचिंग केवळ कंपोनंट माउंट झाल्यानंतर सुरू होते.

पर्याय 2: डेटा फेचिंगसाठी कस्टम हुक वापरणे

कोड डुप्लिकेशन कमी करण्यासाठी, तुम्ही एक कस्टम हुक तयार करू शकता जो डेटा फेचिंग लॉजिकला एन्कॅप्स्युलेट करतो. हा हुक नंतर एकाधिक कंपोनंट्समध्ये पुन्हा वापरला जाऊ शकतो.


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;

त्यानंतर, तुम्ही तुमच्या कंपोनंट्समध्ये हा हुक वापरू शकता:


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 

लोड होत आहे...

; if (error) return

त्रुटी: {error.message}

; if (!product) return

उत्पादन सापडले नाही

; return (

{product.name}

{product.description}

); } export default ProductDetails;

पर्याय 3: डेटा फेचिंग क्षमता असलेल्या राउटिंग लायब्ररीचा वापर करणे (TanStack Router, Remix)

TanStack Router आणि Remix सारख्या लायब्ररीज अंगभूत डेटा फेचिंग मेकॅनिझम देतात जे राउटिंगसह अखंडपणे समाकलित होतात. या लायब्ररीज अनेकदा खालील वैशिष्ट्ये प्रदान करतात:

अशा लायब्ररीचा वापर केल्याने डेटा लोडिंग लक्षणीयरीत्या सोपे होऊ शकते आणि कार्यक्षमता सुधारू शकते, विशेषतः जटिल ॲप्लिकेशन्ससाठी.

सर्व्हर साइड रेंडरिंग (SSR) आणि स्टॅटिक साइट जनरेशन (SSG)

सुधारित SEO आणि सुरुवातीच्या लोड कार्यक्षमतेसाठी, Next.js किंवा Gatsby सारख्या फ्रेमवर्कसह SSR किंवा SSG वापरण्याचा विचार करा. हे फ्रेमवर्क तुम्हाला सर्व्हरवर किंवा बिल्ड टाइम दरम्यान डेटा फेच करण्याची आणि क्लायंटला प्री-रेंडर केलेले HTML सर्व्ह करण्याची परवानगी देतात. यामुळे क्लायंटला सुरुवातीच्या लोडवर डेटा फेच करण्याची आवश्यकता नाहीशी होते, परिणामी वेगवान आणि अधिक SEO-अनुकूल अनुभव मिळतो.

7. वेगवेगळ्या राउटर प्रकारांसह काम करणे

रियाक्ट राउटर v6 विविध वातावरण आणि वापराच्या प्रकरणांसाठी योग्य असे वेगवेगळे राउटर अंमलबजावणी प्रदान करते:

तुमच्या ॲप्लिकेशनच्या आवश्यकता आणि वातावरणास अनुकूल असा राउटर प्रकार निवडा.

निष्कर्ष

रियाक्ट राउटर v6 रियाक्ट ॲप्लिकेशन्ससाठी एक सर्वसमावेशक आणि लवचिक राउटिंग सोल्यूशन प्रदान करतो. या ब्लॉग पोस्टमध्ये चर्चा केलेल्या नेव्हिगेशन पॅटर्न्स समजून आणि लागू करून, तुम्ही मजबूत, वापरकर्त्यासाठी अनुकूल आणि देखरेख करण्यायोग्य वेब ॲप्लिकेशन्स तयार करू शकता. <Routes> आणि <Route> सह डिक्लरेटिव्ह राउटिंगपासून ते URL पॅरामीटर्ससह डायनॅमिक रूट्स, useNavigate सह प्रोग्रॅमॅटिक नेव्हिगेशन आणि प्रभावी डेटा लोडिंग स्ट्रॅटेजीजपर्यंत, रियाक्ट राउटर v6 तुम्हाला तुमच्या वापरकर्त्यांसाठी अखंड नेव्हिगेशन अनुभव तयार करण्यास सक्षम करते. आणखी जास्त नियंत्रण आणि कार्यक्षमता ऑप्टिमायझेशनसाठी प्रगत राउटिंग लायब्ररीज आणि SSR/SSG फ्रेमवर्क एक्सप्लोर करण्याचा विचार करा. तुमच्या विशिष्ट ॲप्लिकेशन आवश्यकतांनुसार हे पॅटर्न्स जुळवून घेण्याचे लक्षात ठेवा आणि नेहमी स्पष्ट आणि अंतर्ज्ञानी वापरकर्ता अनुभवाला प्राधान्य द्या.