انتقل إلى محتوى الدرس
الدرس 47
دورة ReactJS

مفهوم التوجيه في تطبيقات الصفحة الواحدة وإعداد React RouterClient-Side Routing and React Router Setup

تعرّف على آلية تبديل الصفحات لحظياً في تطبيقات الصفحة الواحدة عبر واجهة سجل المتصفح دون إعادة تحميل كاملة، وتثبيت مكتبة React Router وتغليف التطبيق وبناء شجرة المسارات.
أقسام الدرس
6
الأمثلة
4
اللغة
العربية
تاريخ النشر
غير محدد
المشاهدات
0
محتوى الدرس
في هذا الدرس 6تصفّح المواضيع

في المواقع التقليدية متعددة الصفحات (MPA)، يؤدي الانتقال إلى قسم جديد إلى هدم المستند الحالي بالكامل، وطلب ملف HTML جديد من الخادم، وإعادة تشغيل ملفات JavaScript من الصفر؛ مما يمسح أي حالة نشطة في ذاكرة التطبيق فوراً.

يعالج التوجيه من طرف العميل (Client-Side Routing) هذه المشكلة في تطبيقات الصفحة الواحدة (SPA) عبر توظيف واجهة سجل المتصفح history.pushState() لتحديث شريط العنوان ومطابقة المكون المقابل لحظياً مع بقاء جذر React وحالاته المشتركة حية دون انقطاع.

HTML
function App({ entry }) {
  return (
    <MemoryRouter key={entry} initialEntries={[entry]}>
      <Routes>
        <Route path="/" element={<HomeView />} />
        <Route path="/courses" element={<Courses />} />
      </Routes>
    </MemoryRouter>
  );
}

لأن مكتبة React تركز معمارياً على رسم المكونات، يتولى التوجيه حزمة قياسية مستقلة هي React Router عبر الحزمة المخصصة للمتصفح react-router-dom. في أي مشروع مبني بأداة Vite، ثبّت الحزمة مباشرة بالأمر npm install react-router-dom.

فور إضافتها إلى ملف package.json، توفر الحزمة مزود السياق الجذري الذي يراقب العنوان الحالي إلى جانب مكونات المطابقة التصريحية التي تربط المسارات بالشاشات.

يجب تغليف شجرة التطبيق بمزود توجيه واحد فقط قرب نقطة الجذر في main.jsx أو App.jsx، وتوفر المكتبة ثلاثة مزودات رئيسية بحسب بيئة التشغيل:

  • <BrowserRouter>: الخيار القياسي للمواقع الحديثة؛ يعتمد مسارات نظيفة مثل /courses مع ضبط خادم الاستضافة لإرجاع index.html عند التحديث المباشر.
  • <MemoryRouter>: يحفظ سجل التنقل في مصفوفة داخل الذاكرة عبر خاصية initialEntries، وهو الخيار الأمثل للاختبارات البرمجية والمحاكيات المعزولة.
  • <HashRouter>: يضع المسار بعد علامة # كحل احتياطي فقط عند الاستضافة على خادم ملفات ثابت لا يدعم توجيه العناوين.
مخطط يقارن بين إعادة التحميل الكاملة في المواقع التقليدية والتبديل الفوري للمكونات عبر BrowserRouter وRoutes
HTML
import {
  BrowserRouter, Routes, Route
} from 'react-router-dom';
function RootApp() {
  return (
    <BrowserRouter>
      <Routes>
        <Route path="/" element={<LandingPage />} />
      </Routes>
    </BrowserRouter>
  );
}

داخل مزود التوجيه، نُعرّف حاوية <Routes> وبداخلها عناصر <Route> لربط كل عنوان بشاشته. يقبل كل مسار خاصيتين أساسيتين: خاصية path لكتابة نص المسار مثل "/courses"، وخاصية element لتمرير عنصر JSX جاهز مثل <CoursesPage />.

يتيح تمرير العنصر بصياغة JSX المباشرة داخل element تزويد مكون الصفحة بأي خصائص props اعتيادية بنفس سلاسة بقية مكونات React.

HTML
<MemoryRouter initialEntries={[activePath]}>
  <Routes>
    <Route path="/" element={<HomePage />} />
    <Route path="/courses" element={<CoursesPage />} />
    <Route path="/about" element={<AboutPage />} />
  </Routes>
</MemoryRouter>

خلافاً للموجهات القديمة التي كانت تتوقف عند أول سطر يطابق بداية العنوان حسب الترتيب النصي، تعتمد React Router v6 خوارزمية تصنيف الأولوية والأخصية (Ranked Path Matching).

تحسب المكتبة نقاط دقة لكل مسار بناءً على عدد مقاطعه وثباتها؛ لذا يفوز المسار الثابت المحدد /courses/featured تلقائياً على المسار الأعم /courses بغض النظر عن ترتيب كتابة عناصر <Route> في الملف.

HTML
<Routes>
  <Route path="/courses" element={<AllCourses />} />
  <Route path="/courses/top" element={<Featured />} />
  <Route path="/" element={<HomeView />} />
</Routes>

للحفاظ على نظافة معمارية مشروع Vite مع توسع الشاشات، افصل مكونات الصفحات الكاملة عن الوحدات القابلة لإعادة الاستخدام في مجلدين واضحين داخل src/: ضع شاشات المسارات مثل HomePage.jsx وCoursesPage.jsx داخل مجلد src/pages/، وأبقِ العناصر التشاركية كالأزرار والبطاقات داخل src/components/. يوضح الجدول التالي الفروق الهندسية الأساسية:

أداة التوجيهآلية حفظ العنوان والسجلالاستخدام الهندسي الموصى به
<BrowserRouter>مسارات نظيفة عبر واجهة History API القياسيةجميع تطبيقات الويب الحديثة في بيئة الإنتاج
<MemoryRouter>مصفوفة داخلية مستقلة في ذاكرة JavaScriptاختبارات المكونات الآلية وبيئات المحاكاة المعزولة
<HashRouter>الجزء الواقع بعد رمز المرساة # في الرابطالاستضافات الثابتة القديمة التي لا تدعم توجيه الخادم
مجلد src/pages/تُربط مكوناته مباشرة داخل عناصر <Route>شاشات الصفحات الكاملة التي تجمع المكونات المشتركة
خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

مراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي

ماذا تعلّمت في هذا الدرس؟

قارنت في هذا الدرس بين إعادة التحميل التقليدية وتوجيه تطبيقات الصفحة الواحدة، وتعرفت على تثبيت مكتبة React Router واختيار المزود المناسب وبناء شجرة Routes وRoute وآلية المطابقة الذكية وتنظيم مجلد الصفحات. الخطوة التالية: انتقل الآن إلى الدرس رقم 48 «التنقل التصريحي وتمييز الرابط النشط عبر Link وNavLink» لمواصلة البناء التراكمي المتدرج في مسار React الحديث.

مشاركة

هل كان هذا الدرس مفيدًا؟

جارٍ تحميل الآراء…

ابنِ لغتك البرمجية

المصطلحات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 Client-Side Routing التوجيه من طرف العميل
متابعة تغير العنوان داخل المتصفح وتبديل مكون الصفحة المطابق في React لحظياً دون طلب ملف HTML جديد من الخادم.
للمراجعة
02 BrowserRouter مزود مسارات المتصفح
المزود القياسي في React Router الذي يزامن شجرة المكونات مع المسارات النظيفة بالاعتماد على واجهة سجل المتصفح.
للمراجعة
03 MemoryRouter مزود المسارات بالذاكرة
مزود توجيه يدير سجل العناوين داخل مصفوفة في الذاكرة عبر خاصية initialEntries للاختبارات والمحاكيات.
للمراجعة
04 Ranked Path Matching مطابقة المسار الأخص
خوارزمية تقييم النقاط في React Router التي تختار المسار الأدق مطابقة للعنوان تلقائياً بصرف النظر عن ترتيبه النصي.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

حروف قليلة. معنى كامل.

الاختصارات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 SPA SPA
Single-Page Application
تطبيق ويب يحمّل صفحة HTML أساسية واحدة ويبدل الشاشات ديناميكياً في المتصفح دون انقطاع.
للمراجعة
02 MPA MPA
Multi-Page Application
معمارية المواقع التقليدية التي تطلب مستند HTML جديداً بالكامل من الخادم عند كل انتقال بين الصفحات.
للمراجعة
03 URL URL
Uniform Resource Locator
العنوان الموحد في شريط المتصفح الذي تقارن React Router مساره لتحديد مكون الشاشة الواجب عرضه.
للمراجعة
04 DOM DOM
Document Object Model
شجرة عناصر المستند الحية التي تحدّث React بداخلها منطقة الصفحة المتغيرة فقط بدلاً من هدم المستند كاملاً.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

من الفهم للتطبيق

مهامك قبل الاختبار

خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.

0/2مهام منجزة
  1. افتح مثال شجرة المسارات في محرر التجريب وأنشئ مكون PricingPage ثم اربطه بمسار /pricing وأضف زراً لاختبار عرضه.

  2. في مثال أولوية المسارات، انقل مسار الجذر الرئيسي إلى أعلى القائمة وتأكد أن المسار الأخص /courses/featured يظل الفائز عند فتحه.

تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.

مساحة التحدي

اختبر فهمك.
ووصلها للإتقان.

كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.

10أسئلة 2أنواع تحديات 100%هدف الإتقان
تصحيح تلقائي. فرص بلا حدود.

أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.

الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.

لمحة عن التحدي10 أسئلة تنتظرك
01

ماذا يحدث لحالة React المحفوظة في الذاكرة عند إعادة التحميل الكاملة في المواقع التقليدية؟

تؤدي إعادة تحميل الصفحة كاملة إلى هدم بيئة تشغيل JavaScript وتصفير جميع الحالات المحفوظة في الذاكرة.

02

ما واجهة المتصفح القياسية التي تتيح تحديث العنوان من طرف العميل دون إعادة تحميل الصفحة؟

يعتمد التوجيه الحديث في المتصفح على واجهة HTML5 History API لتغيير العنوان بسلاسة.

03

ما الحزمة القياسية التي نثبتها عبر npm لإضافة التوجيه لتطبيقات الويب في مشروع Vite؟

نثبت حزمة react-router-dom المخصصة لبيئة المتصفح وتطبيقات الويب.

04

ما مزود التوجيه القياسي الموصى به لتطبيقات الويب الحديثة في بيئة الإنتاج؟

يُعد BrowserRouter الخيار القياسي لأنه يوفر عناوين نظيفة وقياسية لمحركات البحث والمستخدمين.

05

متى يكون مزود MemoryRouter الخيار الهندسي الأنسب بدلاً من BrowserRouter؟

يُستخدم MemoryRouter في اختبارات المكونات والمحاكيات المعزولة لأنه يدير السجل بالذاكرة عبر initialEntries.

06

ما الخاصية المعتمدة في عنصر <Route> لتمرير مكون الصفحة بصياغة JSX في الإصدار الحديث؟

يعتمد الإصدار السادس خاصية element لتمرير عنصر JSX مثل element={<CoursesPage />}.

07

تختار حاوية <Routes> في الإصدار الحديث المسار الأدق مطابقة تلقائياً حتى لو كُتب مسار الجذر "/" فوقه في الكود.

صواب؛ تعتمد React Router خوارزمية تقييم أخصية المسار ولا تتأثر بترتيب كتابة السطور.

08

ينبغي تغليف كل مكون صفحة فرعية بمزود <BrowserRouter> جديد ومستقل داخل نفس التطبيق.

خطأ؛ يوضع مزود توجيه واحد فقط في قمة شجرة التطبيق لكي تشترك جميع الصفحات في نفس سياق العنوان.

09

لماذا تفصل مشاريع React المنظمة بين مجلد src/pages/ ومجلد src/components/؟

يضم src/pages/ شاشات المسارات الكاملة المرتبطة بالعناوين، بينما يضم src/components/ الوحدات المشتركة القابلة لإعادة الاستخدام.

10

لماذا يُضبط خادم الاستضافة لإرجاع ملف index.html عند استخدام BrowserRouter وتحديث مسار فرعي مباشرة؟

إرجاع index.html يسمح بتحميل حزمة React فيقرأ BrowserRouter المسار الحالي ويعرض الصفحة المقابلة بدلاً من خطأ خادم 404.