0Pricing
React Academy · درس

استنساخ Props وحقنها باستخدام cloneElement

استخدموا React.cloneElement لتمرير props مخفية من المكوّن الأب إلى المكوّن الابن

استنساخ Props وحقنها باستخدام cloneElement درس مجاني في React Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في React Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة React Academy 4 دروس في المجموع.

مرحبًا

في هذا الدرس ستستخدم React.cloneElement لاستنساخ child وحقن خصائص إضافية فيه من المكوّن الأب، من دون حاجة child إلى معرفة هذه الخصائص.

ما هو cloneElement؟

تنشئ `React.cloneElement(element, props, ...children)` عنصر React جديدًا استنادًا إلى عنصر موجود، مع دمج الخصائص الجديدة مع الخصائص الأصلية. ويظل نوع العنصر الأصلي محفوظًا.
const clone = React.cloneElement(child, { active: true });

لماذا نستخدم cloneElement؟

يمكن للمكوّن الأب حقن سلوك، مثل الحالة النشطة أو معالجات الأحداث، في children من دون معرفة children بذلك. ويُستخدم هذا الأسلوب في أنظمة علامات التبويب والأكورديونات ومجموعات النماذج.

مثال على شريط علامات التبويب

يمكن لمكوّن Tabs استنساخ كل child من نوع Tab وحقن خصائص `isActive` و`onClick` فيه تلقائيًا، بحيث لا يحتاج المستهلك إلى إعدادها يدويًا.
function Tabs({ children, activeIndex, onChange }) {
  return (
    <div className="tabs">
      {React.Children.map(children, (child, i) =>
        React.cloneElement(child, {
          isActive: i === activeIndex,
          onClick: () => onChange(i),
        })
      )}
    </div>
  );
}

قواعد دمج الخصائص

يدمج cloneElement الخصائص الجديدة **فوق** الخصائص الأصلية. فإذا كان للعنصر الأصلي خاصية بالمفتاح نفسه، فستفوز القيمة الجديدة. يتم استبدال style وclassName، ولا يجري دمجهما، إلا إذا عالجت ذلك يدويًا.

دمج معالجات الأحداث

لدمج معالجات الأحداث بدلًا من استبدالها، أنشئ الاستدعاءات العكسية المركبة يدويًا قبل تمريرها إلى cloneElement.
React.cloneElement(child, {
  onClick: (e) => {
    child.props.onClick?.(e); // original handler
    handleClick(e);           // injected handler
  },
})

استبدال children

يستبدل المعامل الثالث في `cloneElement` children الخاصة بالعنصر. مرّر محتوى جديدًا لتجاوز children الأصلية بالكامل.
// Replace children with wrapped version
React.cloneElement(child, {}, <strong>{child.props.children}</strong>)

التحقق من نوع العنصر قبل استنساخه

قبل الاستنساخ، تحقّق من أن child عنصر React صالح، ويمكنك اختياريًا التحقق من نوعه لتجنب استنساخ children غير العناصر، مثل النصوص والأرقام وnull.
if (React.isValidElement(child)) {
  return React.cloneElement(child, extraProps);
}
return child;

cloneElement مقابل Context

يُعد cloneElement هشًا لأنه يتطلب معرفة بنية child. ويُفضّل Context عمومًا لتمرير البيانات الضمنية عبر مستويات عديدة. استخدم cloneElement فقط لحقن الخصائص مباشرةً من المكوّن الأب إلى child.

بديل حديث: render props والخطافات

في كثير من الحالات التي كان يُستخدم فيها cloneElement تاريخيًا، يكون استخدام خطاف مخصص أو render prop أوضح وأنظف. فكّر في استخدام cloneElement عندما تكون أنت المسؤول فعلًا عن المكوّن الأب وchildren المباشرة معًا.

اختبار سريع

ماذا يحدث للخاصية الموجودة في كل من العنصر الأصلي وكائن الخصائص الممرَّر إلى React.cloneElement؟

مراجعة

يستنسخ React.cloneElement عنصرًا ويحقن فيه خصائص جديدة. استخدمه لحقن الخصائص الضمنية من المكوّن الأب إلى child في المكوّنات المركبة. وفضّل Context أو render props عندما يكون التسلسل الهرمي أعمق.

اكتمل المقرر

تهانينا! لقد أتممت **React Children API & Slots Pattern**. أصبحت الآن متمكنًا من props.children وأدوات React.Children وخصائص المنافذ المسماة وcloneElement لإنشاء مكوّنات تخطيط مرنة.

الأسئلة الشائعة

هل درس «استنساخ Props وحقنها باستخدام cloneElement» مجاني؟

نعم — نص درس «استنساخ Props وحقنها باستخدام cloneElement» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة React Academy، انتقل إلى CoddyKit PRO. تتضمن دورة React Academy 4 دروس في المجموع.

ماذا ستتعلم في «استنساخ Props وحقنها باستخدام cloneElement»؟

استخدموا React.cloneElement لتمرير props مخفية من المكوّن الأب إلى المكوّن الابن تتمرن على React Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ React Academy؟

لا تُشترط خبرة سابقة. React Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «استنساخ Props وحقنها باستخدام cloneElement»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس React Academy هذا؟

نعم. كل درس في React Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. أساسيات props.children
  2. أدوات React.Children
  3. الخانات المسمّاة عبر Props من نوع Object
  4. استنساخ Props وحقنها باستخدام cloneElement
← العودة إلى React Academy