এখন পর্যন্ত সবকিছু একটি পাতায় ছিল। একটি বাস্তব অ্যাপ্লিকেশনে সাধারণত একাধিক view দরকার — একটি হোম পাতা, একটি প্রোফাইল পাতা, একটি সেটিংস পাতা — প্রতিটি নিজের URL-এ। এর জন্য প্রচলিত লাইব্রেরি হলো React Router: এটি বর্তমান URL-কে একটি কম্পোনেন্টের সাথে মেলায়, একটি সাধারণ <a href> সাধারণত যেভাবে করত সেভাবে ব্রাউজার সম্পূর্ণ পাতা রিলোড না করেই।
npm install react-router-domimport { BrowserRouter, Routes, Route } from 'react-router-dom';
function App() {
return (
<BrowserRouter>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/about" element={<About />} />
<Route path="/users/:id" element={<UserProfile />} />
</Routes>
</BrowserRouter>
);
}BrowserRouter পুরো অ্যাপকে একবার, root-এর কাছে মুড়ে দেয়; Routes বর্তমান URL দেখে আর যে একটি Route-এর path মেলে সেটাই রেন্ডার করে।
একটি সাধারণ <a href="/about"> একটি সম্পূর্ণ পাতা রিলোড ট্রিগার করবে — ক্লায়েন্ট-সাইড রাউটিং ঠিক এটাই এড়াতে আছে। Link একটি anchor ট্যাগের মতো দেখতে কিন্তু একটা ছাড়াই URL আপডেট করে আর render করা রুট বদলে দেয়:
import { Link } from 'react-router-dom';
function Nav() {
return (
<nav>
<Link to="/">Home</Link>
<Link to="/about">About</Link>
</nav>
);
}আগের রুট path-এর :id useParams-এর মাধ্যমে মেলা কম্পোনেন্টের ভেতরে উপলব্ধ হয়ে যায়:
import { useParams } from 'react-router-dom';
function UserProfile() {
const { id } = useParams(); // reads the :id segment from the current URL
const { data: user } = useFetch(`/api/users/${id}`); // the custom hook from earlier
return user ? <h1>{user.name}</h1> : <p>Loading...</p>;
}একটি Link-এ ক্লিকের সাড়ায় না বরং একটি কাজের পরে রিডাইরেক্ট করার জন্য — উদাহরণস্বরূপ, একটি সফল ফর্ম সাবমিশন:
import { useNavigate } from 'react-router-dom';
function LoginForm() {
const navigate = useNavigate();
function handleSubmit(e) {
e.preventDefault();
navigate('/dashboard');
}
return <form onSubmit={handleSubmit}>{/* ... */}</form>;
}