react-router-dom در React چیست؟
مقدمه
در دنیای توسعه وب، استفاده از فریمورکها و کتابخانههایی مانند React بسیار رایج شده است. React یکی از محبوبترین کتابخانههای جاوااسکریپت برای ساخت رابط کاربری (UI) است که توسط فیسبوک توسعه یافته است. یکی از ویژگیهای کلیدی React این است که برنامهها به صورت تکصفحهای (SPA) ساخته میشوند، به این معنی که کاربر بدون بارگذاری مجدد صفحه میتواند بین بخشهای مختلف اپلیکیشن جابجا شود. برای مدیریت مسیرها در این اپلیکیشنها، React Router DOM به کمک آمده و ناوبری میان صفحات مختلف را آسان میکند.
اما این نوع معماری یک چالش مهم دارد: مدیریت مسیرها (Routing). در یک برنامهی سنتی مبتنی بر چند صفحه، آدرس هر صفحه در مرورگر منجر به بارگذاری یک فایل HTML جدید میشود. اما در اپلیکیشنهای SPA، باید بتوان بدون بارگذاری مجدد، بر اساس URL فعلی، محتوای مناسب را به کاربر نمایش داد. اینجاست که کتابخانهای مانند React Router DOM به کمک ما میآید.
React Router DOM یک کتابخانهی قدرتمند و انعطافپذیر برای مدیریت مسیرها در برنامههای React است. این ابزار به ما امکان میدهد تا مسیرهای مختلف تعریف کنیم، بین صفحات مختلف جابجا شویم، مسیرهای داینامیک بسازیم، و حتی کنترل دسترسی به صفحات را در اختیار داشته باشیم.
در این مقاله، با نحوهی نصب، استفاده، و پیادهسازی React Router DOM در پروژههای React آشنا میشویم. همچنین مثالهای عملی برای درک بهتر مفاهیم ارائه خواهد شد.
نصب و راهاندازی React Router DOM
برای شروع استفاده از React Router DOM در پروژهی React، ابتدا باید آن را به عنوان یک وابستگی نصب کنیم. این کار بهسادگی با استفاده از npm یا yarn قابل انجام است.
نصب با npm:
npm install react-router-dom
نصب با yarn:
yarn add react-router-dom
پس از نصب، باید در فایل اصلی پروژه (معمولاً App.js
یا App.tsx
) از کامپوننت BrowserRouter
برای فعالسازی سیستم مسیریابی استفاده کنیم. این کامپوننت مانند یک ظرف عمل میکند که مسیرها را مدیریت میکند.
ساختار اولیه پروژه پس از راهاندازی:
// App.js
import React from 'react';
import { BrowserRouter, Routes, Route } from 'react-router-dom';
import Home from './pages/Home';
import About from './pages/About';
function App() {
return (
<BrowserRouter>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/about" element={<About />} />
</Routes>
</BrowserRouter>
);
}
export default App;
در مثال بالا:
-
BrowserRouter
، پایه و اساس سیستم مسیریابی است. -
Routes
، مجموعهای از مسیرهای مختلف را نگه میدارد. -
Route
، مسیر خاصی را تعریف میکند که با یک آدرس (path
) و یک کامپوننت (element
) مشخص میشود.
با این راهاندازی ساده، اپلیکیشن آمادهی پشتیبانی از چند صفحهی مجازی خواهد بود.
مفاهیم اصلی در React Router DOM
پس از نصب و راهاندازی، برای استفاده مؤثر از React Router DOM باید با مفاهیم پایهای آن آشنا شویم. در این بخش مهمترین کامپوننتها و هوکهایی را بررسی میکنیم که در مدیریت مسیرها در React استفاده میشوند.
1. BrowserRouter
این کامپوننت ریشهی سیستم مسیریابی در برنامه است. باید همهی مسیرها درون این کامپوننت قرار بگیرند. از BrowserRouter
برای اپلیکیشنهایی استفاده میشود که از تاریخچهی مرورگر (history API) استفاده میکنند.
import { BrowserRouter } from 'react-router-dom';
<BrowserRouter>
{/* سایر مسیرها در اینجا قرار میگیرند */}
</BrowserRouter>
2. Routes
و Route
-
Routes
شامل مجموعهای از مسیرهاست. -
هر
Route
یک مسیر خاص را تعریف میکند که با یک آدرس (path
) و کامپوننت (element
) مشخص میشود.
<Routes>
<Route path="/" element={<Home />} />
<Route path="/about" element={<About />} />
</Routes>
3. Link
و NavLink
برای جابجایی بین صفحات در React Router نباید از تگهای <a>
معمولی استفاده کنیم، چون باعث رفرش کل صفحه میشوند. به جای آن، از Link
یا NavLink
استفاده میکنیم:
import { Link } from 'react-router-dom';
<Link to=“/about”>درباره ما</Link>
NavLink
مانند Link
عمل میکند ولی به ما اجازه میدهد که لینک فعال (active) را استایلدهی کنیم:
import { NavLink } from 'react-router-dom';
<NavLink to=“/about” className={({ isActive }) => isActive ? “active” : “”}>
درباره ما
</NavLink>
4. useNavigate
این هوک زمانی استفاده میشود که بخواهیم از طریق کد، کاربر را به مسیر دیگری هدایت کنیم (مثلاً بعد از لاگین موفق):
import { useNavigate } from 'react-router-dom';
const navigate = useNavigate();
navigate(‘/dashboard’);
5. useParams
برای دسترسی به پارامترهایی که در مسیر تعریف شدهاند (مثل /user/:id
) از این هوک استفاده میشود:
import { useParams } from 'react-router-dom';
const { id } = useParams();
نمونه ساده از پیادهسازی مسیرها در React Router DOM
در این بخش، یک پروژه ساده با سه صفحه ایجاد میکنیم: صفحه اصلی (Home)، درباره ما (About)، و تماس با ما (Contact). در ادامه، مسیرها را تعریف میکنیم و از Link
برای جابجایی بین آنها استفاده میکنیم.
1. ساختار فایلها:
src/
│
├── App.js
├── pages/
│ ├── Home.js
│ ├── About.js
│ └── Contact.js
2. محتوای صفحات ساده:
Home.js
const Home = () => {
return <h1>صفحه اصلی</h1>;
};
export default Home;
About.js
const About = () => {
return <h1>درباره ما</h1>;
};
export default About;
Contact.js
const Contact = () => {
return <h1>تماس با ما</h1>;
};
export default Contact;
3. پیادهسازی مسیرها در App.js
import React from 'react';
import { BrowserRouter, Routes, Route, Link } from 'react-router-dom';
import Home from './pages/Home';
import About from '.
/pages/About';
import Contact from './pages/Contact';
function App() {
return (
<BrowserRouter>
<nav>
<ul>
<li><Link to="/">خانه</Link></li>
<li><Link to="/about">درباره ما</Link></li>
<li><Link to="/contact">تماس با ما</Link></li>
</ul>
</nav>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/about" element={<About />} />
<Route path="/contact" element={<Contact />} />
</Routes>
</BrowserRouter>
);
}
export default App;
در مقاله بعدی، با مسیرهای داینامیک آشنا خواهیم شد که یکی از قابلیتهای مهم React Router است.
جمعبندی
در این مقاله با یکی از مهمترین ابزارهای مسیریابی در اپلیکیشنهای React آشنا شدیم: React Router DOM. این کتابخانه به ما امکان میدهد تا در برنامههای تکصفحهای (SPA) به سادگی مسیرهای مختلف را تعریف و مدیریت کنیم.
در طول مقاله با مفاهیم کلیدی مانند:
-
BrowserRouter
،Routes
وRoute
-
لینکها با
Link
وNavLink
-
مسیرهای داینامیک با
useParams
-
ناوبری برنامهمحور با
useNavigate
-
و نمایش صفحات خطا با مسیر wildcard (
*
)
آشنا شدیم و هر کدام را با مثال عملی بررسی کردیم.
React Router DOM ابزاری انعطافپذیر، قابل اعتماد و قدرتمند برای ساخت برنامههایی روان، بدون بارگذاری مجدد و با تجربه کاربری حرفهای است. یادگیری و استفاده صحیح از این کتابخانه، یکی از مهارتهای ضروری برای هر توسعهدهنده React محسوب میشود.