Reactالتوجيه
- الفرق بين الصفحات العادية و صفحات React
- ما هي React Router
- تحضير مشروع للتطبيق العملي
- إنشاء شبكة روابط بسيطة في React
- إنشاء شبكة روابط متقدمة في React
الفرق بين الصفحات العادية و صفحات React
مواقع الويب التقليدية يتم بناء كل صفحة فيها ويب كملف html منفرد، بالإضافة إلى ذلك فإننا نستخدم فيها الوسم <a> لإضافة روابط تجعل المستخدم قادر على الإنتقال من صفحة إلى أخرى.
مواقع الويب التي يتم بناء واجهة المستخدم فيها بواسطة React تكون واجهتها عبارة عن صفحة ويب واحدة و لكنها تتألف من مجموعة من المكونات. و على حسب الطريقة التي يتم فيها عرض المكونات فإن المكوّن قد يتم عرضه للمستخدم على شكل صفحة كاملة و قد يتم عرضه له كجزء من الصفحة. مما يعني أن كل صفحة يراها المستخدم هي في الواقع عبارة عن مكوّن فقط.
في React لا يجب استخدام الروابط التقليدية التي نضيفها بواسطة الوسم <a> فهذا الوسم مخصص للإنتقال من صفحة HTML إلى صفحة HTML أخرى و ليس من مكوّن إلى مكوّن آخر موجود في نفس الصفحة.
في حال استعملتها في React ستجد الصفحة بأكملها تتحدث بدلاً أن يتم عرض مكوّن آخر بدلاً من المكوّن الحالي.
ما هي React Router
لبناء موّجه ( Router ) أو شبكة روابط في React تستطيع التحكم بها بشكل كامل، يمكنك استخدام المكتبة react-router-dom.
هذه المكتبة ليست جزء من React بل هي مكتبة خارجية عليك تضمينها بنفسك في المشروع إذا أردت استخدامها.
تتيح لك هذه المكتبة تحديد الروابط التي يمكن للمستخدم التنقل فيما بينها، المكوّن الذي سيتم عرضه عند الإنتقال للرابط، توجيه للمستخدم لصفحات محددة في حال حصول خطأ ما أو في حال عدم وجود الصفحة التي طلبها و غيرها من المميزات التي سنتعرف عليها.
يوجد عدة أساليب يمكنك اتباعها للتعامل مع هذه المكتبة و لكننا سنعلمك الأسلوب الأفضل لذلك و الذي يُنصح باتباعه.
كما يمكنك التوجه لموقعها الرسمي في حال أردت تعلم المزيد بشأنها.
في الجدول التالي ذكرنا أهم أسماء المكوّنات و الدوال الموجودة في المكتبة react-router-dom.
| بعض محتوى المكتبة |
| 1 |
createBrowserRouter()
تستخدم هذه الدالة لإنشاء شبكة روابط. الروابط نمررها فيها على شكل مصفوفة كائنات، حيث يحتوي كل كائن منها على مسار صفحة محددة بالإضافة إلى المكون الذي سيفتح عند التوجه للصفحة. |
| 2 |
<RouterProvider router={}>
في المكان الذي نريد فيه عرض محتوى شبكة الروابط، نقوم بوضع هذا المكوّن مع تمرير مصفوفة الروابط له كقيمة للخاصية router. |
| 3 |
<Link to="path">text</Link>
لإضافة روابط داخلية في واجهة المستخدم، نستخدم هذا الوسم مع تمرير مسار الصفحة المراد عرضها كقيمة للخاصية to و النص الذي سيظهر كرابط مكان الكلمة text. |
| 4 |
<NavLink to="path">text</NavLink>
يستخدم لإضافة روابط داخلية مثل الوسم <Link> بالإضافة إلى أنه يتيح معرفة الرابط المفتوح حالياً مما يسمح بإضافة خصائص CSS له. |
| 5 |
<Outlet>
يتم وضع هذا المكوّن في المكان المراد فيه عرض محتوى الروابط الداخلية. |
| 6 |
useParams()
في حال كان الرابط يحتوي على قيم دينامكية (أي متغيّرة)، يمكن استخدامها للحصول على كائن فيه جميع القيم الدينامكية التي يتضمنها الرابط على شكل خصائص. |
تحضير مشروع للتطبيق العملي
إفعل الخطوات التالية تباعاً حتى تنشئ مشروع جديد و تطبق فيه الأمثلة كما فعلنا بالضبط:
- قم بإنشاء مشروع جديد إسمه
demo-app.
- بداخل المجلد
src تجد ملف إسمه App.js قم بحذف كل الكود الإفتراضي الموجود فيه.
- بداخل المجلد
src تجد ملف إسمه index.css قم بحذف كل الكود الإفتراضي الموجود فيه.
- بداخل المجلد
src قم بإنشاء مجلد جديد إسمه components لأننا سنضع بداخله المكونات.
- بداخل المجلد
src قم بإنشاء مجلد جديد إسمه pages لأننا سنضع بداخله المكونات التي ستكون بمثابة صفحات.
- بداخل المجلد
src قم بإنشاء مجلد جديد إسمه layouts لأننا سنضع بداخله المكون الذي سيحتوي على التصميم العام لأي صفحة سيتم عرضها.
لاحقاً سننشئ مكونين و 5 صفحات و سنقوم بإضافتها تباعاً في المشروع بالتوازي مع شبكة الروابط التي سنقوم بإنشائها.
تضمين المكتبة react-router-dom
لتضمين هذه المكتبة في المشروع، قم بفتح موجه الأوامر و أنت تقف في المجلد الخاص به و تنفيذ الأمر التالي.
تضمين المكتبة
لتحميل الإصدار الأخير من المكتبة.
لتحميل الإصدار الذي استخدمناه حصراً في الأمثلة.
في هذا الدرس استخدمنا الإصدار السادس من هذه المكتبة و للدقة فإن رقم الإصدار هو 6.26.2 و قد أشرنا لهذا الأمر لأن طريقة استخدام الإصدارات الأقدم من هذه المكتبة تختلف مما يعني أن الأمثلة الموضوعة في هذا الدرس لا تعمل على الإصدارات القديمة من هذه المكتبة.
إنشاء شبكة روابط بسيطة في React
في المثال التالي قمنا بإنشاء شبكة روابط بسيطة على النحو التالي بواسطة الوسم <BrowserRouter>.

استخدمنا الوسم <Routes> لتحديد المسارات الموجودة في واجهة المستخدم بالإضافة إلى المكوّن الذي يجب فتحه في كل مسار مع الإشارة إلى أن خصائص كل مسار منهم قمنا بتحديدها بواسطة الوسم<Route>.
حتى نتمكن من عرض قائمة الروابط نفسها في كل الصفحات، قمنا بإنشاء المكوّن <Layout> ليحدد الشكل العام لأي صفحة و فيه عرضنا قائمة الروابط التي وضعنا في المكوّن <Nabar> و تحتها مباشرةً محتوى الصفحة أياً كانت بواسطة الوسم <Outlet>.
تنبيه: عند نسخ أوامر هذا المثال تأكد جيداً من أن تكون ملفات مشروعك موضوعة كما فعلنا بالضبط حتى لا تضطر إلى إجراء أي تعديلات.
مثال
/src/App.js
/src/layouts/Layout.js
/src/components/Navbar.js
/src/pages/HomePage.js
/src/pages/AboutPage.js
/src/pages/Users.js
/src/pages/ProfilePage.js
/src/pages/NotFoundPage.js
/src/index.css
جرب الكود
إنشاء شبكة روابط متقدمة في React
في المثال التالي قمنا بإنشاء شبكة روابط متقدمة على النحو التالي بواسطة الدالة createBrowserRouter().

استخدمنا الوسم <RouterProvider> لتحديد المسارات الموجودة في واجهة المستخدم بالإضافة إلى المكوّن الذي يجب فتحه في كل مسار مع الإشارة إلى أن خصائص كل مسار منهم قمنا بتحديدها على شكل كائن.
حتى نتمكن من عرض قائمة الروابط نفسها في كل الصفحات، قمنا بإنشاء المكوّن <Layout> ليحدد الشكل العام لأي صفحة و فيه عرضنا قائمة الروابط التي وضعنا في المكوّن <Nabar> و تحتها مباشرةً محتوى الصفحة أياً كانت بواسطة الوسم <Outlet>.
تنبيه: عند نسخ أوامر هذا المثال تأكد جيداً من أن تكون ملفات مشروعك موضوعة كما فعلنا بالضبط حتى لا تضطر إلى إجراء أي تعديلات.
مثال
/src/App.js
/src/layouts/Layout.js
/src/components/Navbar.js
/src/pages/HomePage.js
/src/pages/AboutPage.js
/src/pages/Users.js
/src/pages/ProfilePage.js
/src/pages/NotFoundPage.js
/src/index.css
جرب الكود