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

تمرير البيانات إلى المكونات عبر PropsPassing Props to Components

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

تكتسب المكونات القابلة لإعادة الاستخدام قوتها الحقيقية عندما تستطيع الدالة الواحدة عرض عناوين وأسعار وشارات مختلفة بحسب موضع استدعائها. في مكتبة React، يمرر المكون الأب البيانات إلى المكون الابن عبر الخصائص (props)، وهي تعمل تماماً كالمعاملات الممررة إلى أي دالة JavaScript قياسية.

عند كتابة <CourseCard title="React Foundations" lessons={12} />، تجمع React كافة السمات الممررة في كائن واحد متماسك وتسلمه كمعامل أول إلى دالة CourseCard().

HTML
function CourseCard(props) {
  return (
    <article className="rx-card">
      <h3>{props.title}</h3>
      <p>Lessons: {props.lessons}</p>
    </article>
  );
}

لا تقتصر الخصائص في React على النصوص الثابتة؛ إذ يتيح لك استخدام الأقواس المعقوفة {} تمرير أي نوع بيانات قياسي في JavaScript بدقة تامة:

  • السلاسل النصية: تُكتب مباشرة بين علامتي تنصيص مثل role="Architect".
  • الأرقام والقيم المنطقية: تُمرر داخل أقواس مثل seats={25} وisVerified={true} لكيلا تتحول إلى نصوص.
  • المصفوفات والكائنات: تُمرر كتعابير برمجية مثل tags={['UI', 'JSX']} أو كائن داخل قوسين مزدوجين meta={{ hours: 8 }}.
HTML
function WorkstationSpec(props) {
  return (
    <div className="rx-card">
      <h3>{props.device.name}</h3>
      <p>Memory: {props.ramGb} GB</p>
      <p>Ready: {props.inStock ? 'Yes' : 'No'}</p>
    </div>
  );
}

يؤدي تكرار كتابة البادئة props. قبل كل متغير داخل المكون إلى إطالة الكود دون فائدة. لذلك تعتمد مكونات React الحديثة أسلوب تفكيك الكائنات (Object Destructuring) مباشرة داخل قوسي تعريف الدالة مثل function StudioBadge({ title, subtitle, iconSrc })، مما يوضح مدخلات المكون فور النظر إلى سطره الأول.

مخطط يوضح مراحل تمرير الخصائص من سمات المكون الأب إلى كائن props ثم التفكيك بالقيم الافتراضية
HTML
function StudioBadge({ title, track, iconSrc }) {
  return (
    <div className="rx-card">
      <img src={iconSrc} alt={title} width="36" />
      <h3>{title}</h3>
      <p>{track}</p>
    </div>
  );
}

يمكنك إسناد قيم احتياطية آمنة أثناء التفكيك باستخدام علامة المساواة مثل function PricingBadge({ plan = 'Community', price = 0 }). وتعمل هذه القيم الافتراضية تلقائياً عند عدم تمرير الخاصية من الأب أو عند تمرير القيمة undefined.

انتبه إلى أن تمرير null أو الرقم 0 لا يفعّل القيمة الافتراضية، لأن لغة JavaScript تعاملهما كقيم محددة مقصودة وليست غائبة.

HTML
function PricingTag({ plan = 'Starter', price = 0 }) {
  return (
    <div className="rx-card">
      <h3>{plan}</h3>
      <p>Monthly Cost: ${price}</p>
    </div>
  );
}

تُرسخ مكتبة React قاعدة معمارية صارمة تنص على أن الخصائص المستلمة للقراءة فقط (Read-Only). لا يجوز للمكون الابن مطلقاً تعديل كائن props أو تغيير محتويات الكائنات الممررة إليه مثل كتابة props.price = 0؛ لأن المكون الأب هو المالك الوحيد لتلك البيانات.

إذا احتجت إلى حساب قيمة مشتقة للعرض كالسعر بعد الخصم، احسبها في ثابت محلي جديد داخل الدالة مثل const finalPrice = price * 0.85; دون المساس بالمدخل الأصلي.

عند بناء مكونات واجهة تأسيسية كالأزرار والشارات القابلة للتخصيص، يمكنك فصل الخصائص الخاصة بالمكون وتمرير بقية سمات HTML القياسية دفعة واحدة عبر معامل البقية والانتشار مثل function Badge({ tone = 'info', ...rest }) ثم تطبيقها بـ <span {...rest} />.

استخدم تمرير الانتشار بحكمة في المكونات القاعدية المغلفة لعناصر المتصفح، وتجنب الإفراط فيه بين شاشات التطبيق الكبرى ليبقى تدفق البيانات صريحاً وواضحاً. يلخص الجدول التالي أنماط التعامل مع الخصائص:

نمط الخصائصمثال الصياغة البرمجيةالاستخدام الهندسي الأنسب
التمرير الصريح للخصائص<Card title="React" price={29} />مكونات الأعمال الواضحة ذات المدخلات المحددة والمقروءة
التفكيك مع قيم افتراضيةfunction Card({ price = 0 })تأمين قيم بديلة تلقائية عند غياب الخصائص الاختيارية
حساب قيم محلية مشتقةconst total = price + tax;تنسيق أو حساب المخرجات بنقاء تام دون تعديل المدخلات
التمرير بمعامل الانتشارfunction Btn({ kind, ...rest })تمرير سمات الوصول وHTML القياسية للمكونات التأسيسية
خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

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

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

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

مشاركة

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

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

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

المصطلحات4

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

0 / 4 مفهومةأول بطاقة، أول خطوة
01 Props الخصائص البرمجية
مدخلات تهيئة للقراءة فقط يمررها المكون الأب إلى المكون الابن مجمعة داخل كائن واحد.
للمراجعة
02 Parameter Destructuring تفكيك معاملات الدالة
استخراج الخصائص المطلوبة بالاسم مباشرة داخل قوسي تعريف دالة المكون لكتابة كود أنظف وأكثر وضوحاً.
للمراجعة
03 Default Prop Value القيمة الافتراضية للخاصية
قيمة احتياطية تُسند تلقائياً للمعامل عند عدم تمرير الخاصية من الأب أو تمرير القيمة undefined.
للمراجعة
04 Immutability عدم القابلية للتعديل
المبدأ الهندسي القاضي بعدم تغيير قيم المدخلات أو الكائنات المستلمة مباشرة داخل المكون الفرعي.
للمراجعة

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

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

الاختصارات4

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

0 / 4 مفهومةأول بطاقة، أول خطوة
01 UI UI
User Interface
طبقة العرض البصرية التي تُرسم ديناميكياً بناءً على خصائص المكونات وبنيتها.
للمراجعة
02 JSX JSX
JavaScript XML
الصياغة التصريحية التي تُمكّننا من تمرير خصائص المكونات بأسلوب يشبه سمات HTML.
للمراجعة
03 ES6 ES6
ECMAScript 2015
معيار JavaScript الحديث الذي قدّم ميزات تفكيك الكائنات والمعاملات الافتراضية ومعامل الانتشار.
للمراجعة
04 ARIA ARIA
Accessible Rich Internet Applications
سمات إتاحة الوصول القياسية التي غالباً ما تُمرر إلى العناصر التأسيسية عبر معامل البقية.
للمراجعة

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

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

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

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

0/2مهام منجزة
  1. افتح مثال StudioBadge في محرر التجريب وفكك خاصية جديدة باسم duration مع قيمة افتراضية "4 Hours" واعرضها داخل البطاقة.

  2. أضف نسخة ثالثة من مكون PricingTag بتمرير plan="Enterprise" مع ترك خاصية support للتحقق من عمل القيمة الافتراضية.

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

مساحة التحدي

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

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

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

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

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

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

كيف تسلّم React السمات الممررة على وسم المكون إلى دالة المكون الابن؟

تجمع React كافة السمات الممررة في كائن واحد يُمرر كمعامل أول لدالة المكون.

02

أي صياغة JSX تمرر القيمة الرقمية 42 كرقم فعلي وليس كنص إلى الخاصية lessons؟

تُقيّم الأقواس المعقوفة القيمة كرقم برمجي فعلي في JavaScript بدلاً من معاملتها كنص.

03

ماذا يمثل القوسان المعقوفان المزدوجان في الصياغة spec={{ ram: 32 }} داخل JSX؟

القوس الخارجي يفتح تعبير JavaScript في JSX بينما ينشئ القوس الداخلي كائناً برمجياً قياسياً.

04

أي توقيع دالة يفكك الخاصيتين title وprice بنظافة مباشرة من كائن الخصائص؟

يوضع قوسا تفكيك الكائن مباشرة داخل قوسي معاملات الدالة لقراءة الخصائص بالاسم.

05

في الدالة function Badge({ count = 10 })، متى تأخذ الخاصية count القيمة الافتراضية 10؟

تُطبق القيمة الافتراضية في JavaScript فقط عند غياب الخاصية أو تمرير القيمة undefined إليها.

06

يُسمح للمكون الابن بتعديل قيمة props.price = 0 مباشرة متى أراد عرض خصم مجاني.

خطأ؛ فالخصائص للقراءة فقط ويُحظر تعديلها، ويجب حساب القيمة المعدلة في متغير محلي جديد.

07

إنشاء متغير محلي جديد مثل const discounted = price * 0.9 يحترم قاعدة عدم تعديل الخصائص.

صواب؛ لأن قراءة القيمة لإنتاج ثابت محلي جديد لا تمس المدخل الأصلي إطلاقاً.

08

ما وظيفة المعامل ...rest في التوقيع function IconButton({ label, ...rest })؟

يجمع معامل البقية كافة الخصائص المتبقية غير المفككة في كائن جديد نظيف يحمل الاسم rest.

09

الإفراط العشوائي في نثر {...props} عبر كافة مكونات الصفحات الكبرى يقلل وضوح البيانات التي يحتاجها كل مكون.

صواب؛ لذا يُفضل حصر تمرير الانتشار في المكونات التأسيسية المغلفة لعناصر الواجهة.

10

ما الاتجاه الطبيعي لانتقال الخصائص Props داخل شجرة مكونات React؟

تتدفق الخصائص باتجاه واحد من الأعلى إلى الأسفل أي من المكون الأب إلى الأبناء.