రియాక్ట్ రౌటర్ v6తో అవసరమైన నావిగేషన్ పద్ధతులను అన్వేషించండి. దృఢమైన మరియు యూజర్-ఫ్రెండ్లీ వెబ్ అప్లికేషన్లను రూపొందించడానికి డిక్లరేటివ్ రౌటింగ్, డైనమిక్ రూట్లు, ప్రోగ్రామ్యాటిక్ నావిగేషన్, నెస్టెడ్ రూట్లు మరియు డేటా లోడింగ్ వ్యూహాలను నేర్చుకోండి.
రియాక్ట్ రౌటర్ v6: ఆధునిక వెబ్ యాప్ల కోసం నావిగేషన్ పద్ధతులలో నైపుణ్యం సాధించడం
రియాక్ట్ రౌటర్ v6 అనేది రియాక్ట్ అప్లికేషన్ల కోసం ఒక శక్తివంతమైన మరియు ఫ్లెక్సిబుల్ రౌటింగ్ లైబ్రరీ. ఇది పూర్తి పేజీ రీలోడ్లు లేకుండా నావిగేషన్ను నిర్వహించడం ద్వారా అతుకులు లేని వినియోగదారు అనుభవాన్ని అందించే సింగిల్-పేజ్ అప్లికేషన్లను (SPAs) సృష్టించడానికి మిమ్మల్ని అనుమతిస్తుంది. ఈ బ్లాగ్ పోస్ట్ రియాక్ట్ రౌటర్ v6 ఉపయోగించి అవసరమైన నావిగేషన్ పద్ధతులను లోతుగా విశ్లేషిస్తుంది, దృఢమైన మరియు వినియోగదారు-స్నేహపూర్వక (user-friendly) వెబ్ అప్లికేషన్లను రూపొందించడానికి మీకు అవసరమైన జ్ఞానం మరియు ఉదాహరణలను అందిస్తుంది.
రియాక్ట్ రౌటర్ v6 ముఖ్య భావనలను అర్థం చేసుకోవడం
నిర్దిష్ట పద్ధతుల్లోకి వెళ్లే ముందు, కొన్ని ప్రాథమిక భావనలను సమీక్షిద్దాం:
- డిక్లరేటివ్ రౌటింగ్: రియాక్ట్ రౌటర్ ఒక డిక్లరేటివ్ విధానాన్ని ఉపయోగిస్తుంది, ఇక్కడ మీరు మీ రూట్లను రియాక్ట్ కాంపోనెంట్లుగా నిర్వచిస్తారు. ఇది మీ రౌటింగ్ లాజిక్ను స్పష్టంగా మరియు నిర్వహించదగినదిగా చేస్తుంది.
- కాంపోనెంట్లు: ముఖ్యమైన కాంపోనెంట్లలో
BrowserRouter
,HashRouter
,MemoryRouter
,Routes
, మరియుRoute
ఉన్నాయి. - హుక్స్: రియాక్ట్ రౌటర్ రౌటింగ్ సమాచారాన్ని యాక్సెస్ చేయడానికి మరియు నావిగేషన్ను మార్చడానికి
useNavigate
,useLocation
,useParams
, మరియుuseRoutes
వంటి హుక్లను అందిస్తుంది.
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;
ఈ ఉదాహరణలో, మేము మూడు రూట్లను నిర్వచించాము:
/
:Home
కాంపోనెంట్ను రెండర్ చేస్తుంది./about
:About
కాంపోనెంట్ను రెండర్ చేస్తుంది./contact
:Contact
కాంపోనెంట్ను రెండర్ చేస్తుంది.
BrowserRouter
కాంపోనెంట్ బ్రౌజర్ హిస్టరీ-ఆధారిత రౌటింగ్ను ఎనేబుల్ చేస్తుంది. రియాక్ట్ రౌటర్ ప్రస్తుత URLను నిర్వచించిన రూట్లతో సరిపోల్చి, సంబంధిత కాంపోనెంట్ను రెండర్ చేస్తుంది.
2. URL పారామీటర్లతో డైనమిక్ రూట్లు
డైనమిక్ రూట్లు URLలోని విభిన్న విలువలను నిర్వహించగల రూట్లను సృష్టించడానికి మిమ్మల్ని అనుమతిస్తాయి. ఉత్పత్తి ID లేదా వినియోగదారు ID వంటి ప్రత్యేక ఐడెంటిఫైయర్ ఆధారంగా కంటెంట్ను ప్రదర్శించడానికి ఇది ఉపయోగపడుతుంది. రియాక్ట్ రౌటర్ v6 URL పారామీటర్లను నిర్వచించడానికి :
గుర్తును ఉపయోగిస్తుంది.
ఉదాహరణ: ఉత్పత్తి వివరాలను ప్రదర్శించడం
ఉదాహరణకు, మీకు ఒక ఇ-కామర్స్ అప్లికేషన్ ఉందని మరియు ప్రతి ఉత్పత్తి యొక్క వివరాలను దాని ID ఆధారంగా ప్రదర్శించాలనుకుంటే, మీరు ఈ విధంగా ఒక డైనమిక్ రూట్ను నిర్వచించవచ్చు:
import { BrowserRouter, Routes, Route, useParams } from "react-router-dom";
function ProductDetails() {
const { productId } = useParams();
// productId ఆధారంగా ఉత్పత్తి వివరాలను ఫెచ్ చేయండి
// ...
return (
Product Details
Product ID: {productId}
{/* ఇక్కడ ఉత్పత్తి వివరాలను ప్రదర్శించండి */}
);
}
function App() {
return (
} />
);
}
export default App;
ఈ ఉదాహరణలో:
/products/:productId
ఒక డైనమిక్ రూట్ను నిర్వచిస్తుంది, ఇక్కడ:productId
ఒక URL పారామీటర్.ProductDetails
కాంపోనెంట్లోproductId
పారామీటర్ యొక్క విలువను యాక్సెస్ చేయడానికిuseParams
హుక్ ఉపయోగించబడుతుంది.- ఆ తర్వాత మీరు మీ డేటా సోర్స్ నుండి సంబంధిత ఉత్పత్తి వివరాలను ఫెచ్ చేయడానికి
productId
ని ఉపయోగించవచ్చు.
అంతర్జాతీయీకరణ ఉదాహరణ: భాషా కోడ్లను నిర్వహించడం
బహుభాషా వెబ్సైట్ కోసం, మీరు భాషా కోడ్లను నిర్వహించడానికి డైనమిక్ రూట్ను ఉపయోగించవచ్చు:
} />
ఈ రూట్ /en/about
, /fr/about
, మరియు /es/about
వంటి URLలకు సరిపోలుతుంది. ఆ తర్వాత lang
పారామీటర్ను తగిన భాషా వనరులను లోడ్ చేయడానికి ఉపయోగించవచ్చు.
3. useNavigate
తో ప్రోగ్రామ్యాటిక్ నావిగేషన్
స్టాటిక్ లింక్ల కోసం డిక్లరేటివ్ రౌటింగ్ అద్భుతంగా ఉన్నప్పటికీ, వినియోగదారు చర్యలు లేదా అప్లికేషన్ లాజిక్ ఆధారంగా ప్రోగ్రామ్యాటిక్గా నావిగేట్ చేయవలసి ఉంటుంది. రియాక్ట్ రౌటర్ v6 ఈ ప్రయోజనం కోసం useNavigate
హుక్ను అందిస్తుంది. useNavigate
ఒక ఫంక్షన్ను తిరిగి ఇస్తుంది, ఇది మిమ్మల్ని వివిధ రూట్లకు నావిగేట్ చేయడానికి అనుమతిస్తుంది.
ఉదాహరణ: ఫారం సమర్పణ తర్వాత దారి మళ్లించడం (Redirecting)
ఉదాహరణకు, మీరు ఒక ఫారమ్ను సమర్పించిన తర్వాత వినియోగదారుని సక్సెస్ పేజీకి దారి మళ్లించాలనుకుంటే:
import { useNavigate } from "react-router-dom";
function MyForm() {
const navigate = useNavigate();
const handleSubmit = async (event) => {
event.preventDefault();
// ఫారం డేటాను సమర్పించండి
// ...
// విజయవంతమైన సమర్పణ తర్వాత సక్సెస్ పేజీకి దారి మళ్లించండి
navigate("/success");
};
return (
);
}
export default MyForm;
ఈ ఉదాహరణలో:
- మేము
navigate
ఫంక్షన్ను పొందడానికిuseNavigate
హుక్ను ఉపయోగిస్తాము. - ఫారం విజయవంతంగా సమర్పించబడిన తర్వాత, మేము వినియోగదారుని
/success
రూట్కు దారి మళ్లించడానికిnavigate("/success")
ని కాల్ చేస్తాము.
నావిగేషన్ సమయంలో స్టేట్ పాస్ చేయడం
మీరు navigate
కు రెండవ ఆర్గ్యుమెంట్ను ఉపయోగించి నావిగేషన్తో పాటు స్టేట్ను కూడా పాస్ చేయవచ్చు:
native("/confirmation", { state: { orderId: "12345" } });
ఇది టార్గెట్ కాంపోనెంట్కు డేటాను పాస్ చేయడానికి మిమ్మల్ని అనుమతిస్తుంది, దీనిని useLocation
హుక్ని ఉపయోగించి యాక్సెస్ చేయవచ్చు.
4. నెస్టెడ్ రూట్లు మరియు లేఅవుట్లు
నెస్టెడ్ రూట్లు క్రమానుగత (hierarchical) రౌటింగ్ నిర్మాణాలను సృష్టించడానికి మిమ్మల్ని అనుమతిస్తాయి, ఇక్కడ ఒక రూట్ మరొకదానిలో పొందుపరచబడి ఉంటుంది. బహుళ స్థాయిల నావిగేషన్తో సంక్లిష్టమైన అప్లికేషన్లను నిర్వహించడానికి ఇది ఉపయోగపడుతుంది. అప్లికేషన్లోని ఒక విభాగంలో కొన్ని 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/*
రూట్/profile
తో ప్రారంభమయ్యే ఏదైనా URLకి సరిపోలుతుంది.Profile
కాంపోనెంట్ ఒక నావిగేషన్ మెనూ మరియు నెస్టెడ్ రూట్లను నిర్వహించడానికి ఒక<Routes>
కాంపోనెంట్ను రెండర్ చేస్తుంది.- నెస్టెడ్ రూట్లు
/profile/info
,/profile/settings
, మరియు/profile/orders
కోసం రెండర్ చేయవలసిన కాంపోనెంట్లను నిర్వచిస్తాయి.
పేరెంట్ రూట్లోని *
కీలకం; ఇది పేరెంట్ రూట్ ఏదైనా సబ్-పాత్తో సరిపోలాలని సూచిస్తుంది, దీనివల్ల నెస్టెడ్ రూట్లు Profile
కాంపోనెంట్లో సరిగ్గా సరిపోలుతాయి.
5. "నాట్ ఫౌండ్" (404) ఎర్రర్లను నిర్వహించడం
వినియోగదారు ఉనికిలో లేని రూట్కు నావిగేట్ చేసిన సందర్భాలను నిర్వహించడం చాలా అవసరం. రియాక్ట్ రౌటర్ v6 ఒక క్యాచ్-ఆల్ రూట్తో దీనిని సులభతరం చేస్తుంది.
ఉదాహరణ: ఒక 404 పేజీని అమలు చేయడం
import { BrowserRouter, Routes, Route, Link } from "react-router-dom";
function NotFound() {
return (
404 - కనుగొనబడలేదు
మీరు వెతుకుతున్న పేజీ ఉనికిలో లేదు.
హోమ్కు తిరిగి వెళ్లండి
);
}
function App() {
return (
} />
} />
} />
);
}
ఈ ఉదాహరణలో:
<Route path="*" element={<NotFound />} />
రూట్ ఒక క్యాచ్-ఆల్ రూట్, ఇది నిర్వచించబడిన ఇతర రూట్లలో దేనితోనూ సరిపోలని ఏదైనా URLకి సరిపోలుతుంది.- ఈ రూట్ను
<Routes>
కాంపోనెంట్ చివరలో ఉంచడం ముఖ్యం, తద్వారా ఇతర రూట్లు ఏవీ సరిపోలనప్పుడు మాత్రమే ఇది సరిపోలుతుంది.
6. రియాక్ట్ రౌటర్ v6తో డేటా లోడింగ్ వ్యూహాలు
రియాక్ట్ రౌటర్ v6 దాని ముందు వెర్షన్ (React Router 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 వివిధ పరిసరాలు మరియు వినియోగ సందర్భాలకు సరిపోయేలా విభిన్న రౌటర్ ఇంప్లిమెంటేషన్లను అందిస్తుంది:
- BrowserRouter: నావిగేషన్ కోసం HTML5 హిస్టరీ API (
pushState
,replaceState
)ని ఉపయోగిస్తుంది. బ్రౌజర్ పరిసరాలలో నడుస్తున్న వెబ్ అప్లికేషన్ల కోసం ఇది అత్యంత సాధారణ ఎంపిక. - HashRouter: నావిగేషన్ కోసం URL యొక్క హ్యాష్ భాగాన్ని (
#
) ఉపయోగిస్తుంది. పాత బ్రౌజర్లకు మద్దతు ఇవ్వాల్సిన లేదా HTML5 హిస్టరీ APIకి మద్దతు ఇవ్వని సర్వర్లలో అమర్చబడిన అప్లికేషన్ల కోసం ఇది ఉపయోగపడుతుంది. - MemoryRouter: మీ "URL" యొక్క చరిత్రను మెమరీలో (URLల శ్రేణి) ఉంచుతుంది. రియాక్ట్ నేటివ్ మరియు టెస్టింగ్ వంటి పరిసరాలలో ఇది ఉపయోగపడుతుంది.
మీ అప్లికేషన్ అవసరాలు మరియు పరిసరాలకు ఉత్తమంగా సరిపోయే రౌటర్ రకాన్ని ఎంచుకోండి.
ముగింపు
రియాక్ట్ రౌటర్ v6 రియాక్ట్ అప్లికేషన్ల కోసం ఒక సమగ్రమైన మరియు ఫ్లెక్సిబుల్ రౌటింగ్ పరిష్కారాన్ని అందిస్తుంది. ఈ బ్లాగ్ పోస్ట్లో చర్చించిన నావిగేషన్ పద్ధతులను అర్థం చేసుకుని, వర్తింపజేయడం ద్వారా, మీరు దృఢమైన, వినియోగదారు-స్నేహపూర్వక మరియు నిర్వహించదగిన వెబ్ అప్లికేషన్లను రూపొందించవచ్చు. <Routes>
మరియు <Route>
తో డిక్లరేటివ్ రౌటింగ్ నుండి, URL పారామీటర్లతో డైనమిక్ రూట్లు, useNavigate
తో ప్రోగ్రామ్యాటిక్ నావిగేషన్, మరియు సమర్థవంతమైన డేటా లోడింగ్ వ్యూహాల వరకు, రియాక్ట్ రౌటర్ v6 మీ వినియోగదారులకు అతుకులు లేని నావిగేషన్ అనుభవాలను సృష్టించడానికి మీకు అధికారం ఇస్తుంది. ఇంకా ఎక్కువ నియంత్రణ మరియు పనితీరు ఆప్టిమైజేషన్ కోసం అధునాతన రౌటింగ్ లైబ్రరీలు మరియు SSR/SSG ఫ్రేమ్వర్క్లను అన్వేషించడాన్ని పరిగణించండి. ఈ పద్ధతులను మీ నిర్దిష్ట అప్లికేషన్ అవసరాలకు అనుగుణంగా మార్చాలని మరియు ఎల్లప్పుడూ స్పష్టమైన మరియు సహజమైన వినియోగదారు అనుభవానికి ప్రాధాన్యత ఇవ్వాలని గుర్తుంచుకోండి.