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

تركيب المكونات وخاصية المحتوى المتداخل childrenComponent Composition and Children Prop

أتقن بناء تخطيطات React المرنة عبر تركيب المكونات وتغليف المحتوى المتداخل بخاصية children وتمرير منافذ العرض المتعددة وتخصيص الواجهات دون وراثة الأصناف.
أقسام الدرس
6
الأمثلة
3
اللغة
العربية
تاريخ النشر
غير محدد
المشاهدات
0
محتوى الدرس
في هذا الدرس 6تصفّح المواضيع

في لغة HTML القياسية، تحتضن وسوم الحاويات مثل <article> و<section> أي عناصر نضعها بداخلها دون أن تفرض مسبقاً إن كانت فقرات نصية أم صوراً أم قوائم. يمنحنا تركيب المكونات (Component Composition) هذه المرونة ذاتها في React عبر تجميع شاشات متكاملة بتداخل مكونات صغيرة مستقلة داخل أغلفة تخطيط موحدة.

كلما وضعت عناصر بين وسمي الفتح والإغلاق لمكون مخصص مثل <SurfaceCard>...</SurfaceCard>، تمرر مكتبة React ذلك المحتوى تلقائياً داخل خاصية محجوزة باسم children. وبمجرد تفكيك { children } ووضعها داخل بنية الغلاف، يتحول المكون إلى حاوية قياسية تستقبل النصوص والصور والمكونات الفرعية بسلاسة.

HTML
function SurfaceCard({ children }) {
  return <div className="rx-card">{children}</div>;
}

function App() {
  return (
    <SurfaceCard>
      <h3>Workspace Ready</h3>
      <p>Nested via children prop.</p>
    </SurfaceCard>
  );
}

ماذا لو احتاج مكون التخطيط إلى أكثر من منطقة محتوى واحدة، كشريط رأس علوي ومنطقة وسطى وتذييل سفلي؟ بما أن عناصر JSX ما هي إلا كائنات JavaScript عادية، يمكنك تمرير أشجار عناصر كاملة عبر منافذ عرض مسماة (Named Slot Props) مثل header وfooter جنباً إلى جنب مع children للمحتوى الرئيسي.

مخطط شجري يوضح استقبال مكون الغلاف لمنفذ الرأس والمحتوى المتداخل children ومنفذ الأزرار
HTML
function PanelLayout({ header, footer, children }) {
  return (
    <article className="rx-card">
      <header>{header}</header>
      <div>{children}</div>
      <footer>{footer}</footer>
    </article>
  );
}

يحل التركيب أيضاً مسألة تخصيص المكونات (Specialization) بأناقة بالغة؛ فعندما تمتلك مكوناً عاماً مثل <NoticeBanner> وتريد إنشاء نسخة متخصصة كتنبيه نجاح <SuccessBanner>، يقوم المكون المتخصص ببساطة بإرجاع المكون العام مع ضبط خصائصه اللونية والعنوانية مسبقاً وتمرير {children} بداخله.

HTML
function Notice({ badge, children }) {
  return (
    <aside className="rx-card">
      <strong>{badge}</strong>
      <div>{children}</div>
    </aside>
  );
}
function SuccessNotice({ children }) {
  return <Notice badge="Success">{children}</Notice>;
}

يتساءل بعض المبرمجين القادمين من خلفيات كائنية تقليدية عمّا إذا كان ينبغي إنشاء أصناف مكونات قاعدية والوراثة منها. تحسم مكتبة React هذا القرار بقاعدة قاطعة، وهي اعتماد التركيب بدلاً من الوراثة دائماً (Composition over Inheritance)؛ إذ توفر الخصائص وchildren والمنافذ المسماة مرونة كاملة دون تعقيد سلاسل الوراثة الهشة وتضارب الدوال.

لاختيار الأسلوب الأنسب عند تصميم واجهة المكون، اعتمد خاصية children عندما يمتلك الغلاف منطقة محتوى رئيسية واحدة بديهية، وأضف خصائص منافذ مسماة مثل header وactions عندما ينسق التخطيط منطقتين مستقلتين أو أكثر. يوضح الجدول التالي متى تختار كل نمط:

نمط التركيبتوقيع الخصائص المعتادسيناريو التخطيط المثالي
منفذ تغليف مفردfunction Card({ children })البطاقات العامة وصناديق التنبيه وحاويات الأقسام
تخطيط متعدد المنافذfunction Shell({ header, sidebar, children })قوالب الصفحات والنوافذ المزودة بشريط أزرار مستقل
غلاف التخصيص المشتقfunction ErrorAlert({ children })نسخ مهيأة مسبقاً تغلّف مكوناً أساسياً عاماً
وراثة الأصناف البرمجيةمتروكة كلياً في React الحديثةلا تُستخدم أبداً — استُبدلت بنسبة 100% بالتركيب والخصائص
خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

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

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

أتقنت في هذا الدرس مفهوم تركيب المكونات في React، وبنيت حاويات مرنة بخاصية children، ونظمت التخطيطات متعددة المناطق عبر منافذ JSX المسماة، وطبقت التخصيص بالتركيب دون أي وراثة أصناف. الخطوة التالية: انتقل الآن إلى الدرس رقم 12 «العرض الشرطي للعناصر في React» لمواصلة البناء التراكمي المتدرج في مسار React الحديث.

مشاركة

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

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

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

المصطلحات4

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

0 / 4 مفهومةأول بطاقة، أول خطوة
01 Component Composition تركيب المكونات
تجميع مكونات صغيرة محددة الوظيفة داخل مكونات حاوية أو تخطيطية لبناء واجهات غنية ومرنة.
للمراجعة
02 children Prop خاصية children
خاصية مدمجة في React تستقبل تلقائياً أي عناصر توضع بين وسم الفتح ووسم الإغلاق للمكون.
للمراجعة
03 Named Slot Prop منفذ العرض المسمى
خاصية مخصصة مثل header أو footer تستقبل عناصر JSX لملء منطقة محددة في تخطيط المكون.
للمراجعة
04 Specialization تخصيص المكون العام
إنشاء نسخة مخصصة من مكون عبر تغليف مكون عام وتمرير قيم محددة مسبقاً لخصائصه.
للمراجعة

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

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

الاختصارات4

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

0 / 4 مفهومةأول بطاقة، أول خطوة
01 JSX JSX
JavaScript XML
ينتج كائنات عناصر قياسية يمكن تمريرها بحرية تامة عبر خاصية children أو الخصائص المسماة.
للمراجعة
02 API API
Application Programming Interface
في هندسة الواجهات، مجموعة الخصائص والمنافذ التي يوفرها المكون للمكونات الأب التي تستدعيه.
للمراجعة
03 DRY DRY
Don’t Repeat Yourself
مبدأ عدم تكرار الكود، ويتحقق بتوحيد الإطارات والهوامش المشتركة داخل مكون حاوية واحد.
للمراجعة
04 DOM DOM
Document Object Model
شجرة عناصر المتصفح النهائية الناتجة بعد ترجمة React لكافة المكونات المتداخلة.
للمراجعة

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

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

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

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

0/2مهام منجزة
  1. افتح مثال SurfaceCard في محرر التجريب وأضف بطاقة ثالثة تغلّف عنواناً فرعياً وقائمة نقطية من عنصرين.

  2. طوّر مكون PanelLayout في محرر التجريب ليستقبل خاصية إضافية ويعرض شارة حالة بجانب العنوان العلوي.

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

مساحة التحدي

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

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

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

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

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

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

ما اسم الخاصية التي تستقبل تلقائياً العناصر الموضوعة بين وسمي الفتح والإغلاق <Card>...</Card>؟

تضع React أي محتوى متداخل بين وسمي المكون داخل الخاصية القياسية children تلقائياً.

02

يجب أن يعرف مكون الغلاف المعتمد على {children} مسبقاً نوع الوسوم الدقيقة التي سيضعها الأب بداخله.

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

03

كيف تصمم مكون تخطيط في React يحتاج إلى ثلاث مناطق محتوى مستقلة كالرأس والشريط الجانبي والمتن؟

نمرر عناصر JSX عبر خصائص مسماة مثل header وsidebar مع استخدام children للمحتوى الرئيسي.

04

في React، يمكنك تمرير عنصر JSX كامل مثل <Badge text="New" /> كقيمة داخل أي خاصية عادية.

صواب؛ لأن عناصر JSX تُترجم إلى كائنات JavaScript قياسية يمكن تمريرها عبر أي خاصية.

05

ما الطريقة القياسية في React لإنشاء مكون متخصص SuccessBanner اعتماداً على مكون عام NoticeBanner؟

يبني SuccessBanner واجهته بإرجاع المكون العام NoticeBanner مع تمرير الخصائص المخصصة و{children}.

06

ما المبدأ المعماري الذي تعتمده React بنسبة 100% بديلاً عن وراثة الأصناف؟

تعتمد مكتبة React مبدأ التركيب بدلاً من الوراثة في بناء وتخصيص كافة المكونات.

07

إذا استدعى الأب <SurfaceCard><h3>Title</h3></SurfaceCard> ونسي مكون SurfaceCard كتابة {children} في جملة الإرجاع، فماذا يحدث؟

لن يظهر العنوان المتداخل على الشاشة لأن المكون الحاضن لم يدرج {children} ضمن شجرة إرجاعه.

08

تتطلب مشاريع React الحديثة عادةً إنشاء أصناف مكونات أبوية وإعادة تعريف دالة الرسم عبر الوراثة.

خطأ؛ فالدوال والتركيب عبر الخصائص تغطي كافة احتياجات إعادة الاستخدام دون أي وراثة.

09

متى يُفضل استخدام خاصية children القياسية بدلاً من اختراع خاصية مخصصة مثل bodyContent؟

عندما يضم الغلاف منطقة محتوى رئيسية واحدة، فإن التداخل الطبيعي عبر children يحاكي سلاسة وسوم HTML.

10

يُعد الجمع بين المنافذ المسماة مثل header وfooter مع خاصية children في نفس مكون التخطيط نمطاً قياسياً نظيفاً في React.

صواب؛ فهذا الجمع يمنح المكون وضوحاً عالياً للمحتوى الرئيسي مع مرونة تامة للأشرطة الملحقة.