0Pricing
React Academy · درس

أدوات React.Children

استخدموا React.Children.map وcount وtoArray لمعالجة children بأمان

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

مرحبًا

في هذا الدرس ستستخدم أدوات React.Children — map وcount وtoArray وforEach — للتكرار على children وتحويلها بأمان، بصرف النظر عن عدد العناصر الممرَّرة.

مشكلة استخدام أساليب المصفوفات مباشرة

لأن `props.children` قد تكون عنصرًا واحدًا أو مصفوفة أو undefined، فإن استدعاء `.map()` عليها مباشرةً سيتسبب في حدوث خطأ. تتعامل أدوات React.Children مع جميع هذه الحالات بأمان.
// Unsafe — crashes if children is a single element
children.map(c => ...);

// Safe
React.Children.map(children, c => ...);

React.Children.map

تعمل مثل `Array.prototype.map`، لكنها تتعامل بأمان مع child واحد أو عدة children أو null وundefined. وتُرجع مصفوفة من العناصر المستنسخة، أو أي قيمة يُرجعها الاستدعاء العكسي.
function List({ children }) {
  return (
    <ul>
      {React.Children.map(children, (child, i) => (
        <li key={i}>{child}</li>
      ))}
    </ul>
  );
}

React.Children.count

تُرجع `React.Children.count(children)` عدد children، إذ تحسب العناصر المفردة على أنها 1، وتحسب null وundefined على أنهما 0.
function RequiresTwo({ children }) {
  if (React.Children.count(children) !== 2) {
    throw new Error('Exactly two children required');
  }
  return <div>{children}</div>;
}

React.Children.toArray

تحوّل children إلى مصفوفة مسطحة ذات مفاتيح ثابتة. يتيح لك ذلك فرز children أو تصفيتها أو اقتطاعها باستخدام أساليب المصفوفات العادية من دون القلق بشأن التداخل.
function Reversed({ children }) {
  const arr = React.Children.toArray(children);
  return <>{arr.reverse()}</>;
}

React.Children.forEach

تشبه `.map()`، لكنها لا تُرجع قيمة. استخدمها عندما تريد التكرار على children لتنفيذ آثار جانبية، مثل التحقق من أنواعها أو إنشاء جدول بحث.
React.Children.forEach(children, child => {
  if (!React.isValidElement(child)) {
    console.warn('Non-element child found');
  }
});

React.Children.only

تتحقق `React.Children.only(children)` من وجود عنصر ابن واحد بالضبط، ثم تُرجعه. وتُصدر خطأً إذا لم توجد أي children أو وُجد أكثر من child واحد. وهي مفيدة لفرض واجهات برمجية تتطلب child واحدًا.
function SingleChild({ children }) {
  const child = React.Children.only(children);
  return React.cloneElement(child, { 'data-wrapped': true });
}

التحقق من أنواع children

اجمع بين `React.Children.forEach` و`React.isValidElement` ونوع child لفرض تمرير أنواع محددة من المكوّنات فقط بصفتها children.
React.Children.forEach(children, child => {
  if (child.type !== TabPanel) {
    throw new Error('Only TabPanel children allowed');
  }
});

React.Children مقابل Array.from

في React 18 والإصدارات الأحدث، قد تكون children شجرة عناصر React وليست مصفوفة عادية. استخدم React.Children دائمًا بدلًا من Array.from لتجنب الحالات الخاصة المتعلقة بالعناصر المفردة وFragments.

بديل حديث: التسطيح باستخدام toArray

إذا احتجت إلى إجراء تحويلات معقدة، فاستدعِ `React.Children.toArray(children)` أولًا للحصول على مصفوفة مسطحة ذات مفاتيح، ثم طبّق عليها أساليب المصفوفات العادية.
const items = React.Children.toArray(children);
const first = items[0];
const rest = items.slice(1);

اختبار سريع

أي من أساليب React.Children يتعامل بأمان مع عنصر واحد ومصفوفة وchildren تساوي null أو undefined، مثل Array.map لكن بمتانة أكبر؟

مراجعة

استخدم React.Children.map للتكرار الآمن، وcount للتحقق من العدد، وtoArray لاستخدام أساليب المصفوفات، وforEach للتكرار ذي الآثار الجانبية، وonly للتحقق من وجود child واحد بالضبط.

التالي

الدرس التالي: **Named Slots via Object Props** — ستنفذ منافذ header وbody وfooter من خلال تمرير JSX باستخدام خصائص مسماة.

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

هل درس «أدوات React.Children» مجاني؟

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

ماذا ستتعلم في «أدوات React.Children»؟

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

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

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

كم من الوقت يستغرق درس «أدوات React.Children»؟

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

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

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

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

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