0Pricing
React Academy · درس

نمط Render Props

مرّر دالة كخاصية تُرجع JSX لمشاركة السلوك دون ربطه بواجهة المستخدم.

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

مرحبًا

في هذا الدرس ستفهم نمط Render Props — أي تمرير دالة باعتبارها prop وتُرجع JSX — وستتعلّم متى يكون هذا النمط مفيدًا لمشاركة السلوك بين المكوّنات.

ما هو Render Props؟

Render Props هو نمط يقبل فيه المكوّن prop عبارةً عن دالة. يستدعي المكوّن هذه الدالة لإنتاج ناتجه المعروض. يتحكم المكوّن المستهلِك في واجهة المستخدم، بينما يوفّر المكوّن السلوك.
<DataProvider render={data => <UserCard user={data} />} />

مثال بسيط على Render Prop

يدير مكوّن Toggle حالة الفتح والإغلاق، ويستدعي render prop بالحالة الحالية ودالة للتبديل. ويحدد المكوّن المستهلِك كيفية العرض.
function Toggle({ render }) {
  const [on, setOn] = useState(false);
  return render(on, () => setOn(!on));
}

<Toggle render={(on, toggle) => (
  <button onClick={toggle}>{on ? 'Close' : 'Open'}</button>
)} />

استخدام children باعتبارها Render Prop

بدلًا من استخدام render prop مُسمّاة، يمكنك استخدام `children` باعتبارها دالة. تستخدم العديد من المكتبات، مثل React Router v5 وFormik، هذا النمط — ويُسمّى أحيانًا 'children as a function'.
<Toggle>
  {(on, toggle) => (
    <div>
      {on && <Panel />}
      <button onClick={toggle}>Toggle</button>
    </div>
  )}
</Toggle>

تتبّع موضع مؤشر الفأرة

هذا مثال كلاسيكي على Render Props: يتتبّع مكوّن MouseTracker موضع المؤشر ويمرّره إلى render prop. ويمكن لأي مكوّن مستهلِك عرض الموضع بالطريقة التي يريدها.
function MouseTracker({ children }) {
  const [pos, setPos] = useState({ x: 0, y: 0 });
  return (
    <div onMouseMove={e => setPos({ x: e.clientX, y: e.clientY })}>
      {children(pos)}
    </div>
  );
}

Render Props مقابل Custom Hooks

كان Render Props هو النمط المفضّل قبل ظهور hooks. أما الآن فتؤدي Custom Hooks الغرض نفسه بطريقة أنظف: إذ تُرجع hook البيانات والدوال، ويستخدمها المكوّن في JSX الخاص به. وتُفضَّل hooks في React الحديثة.
// Old: render props
<Mouse render={pos => <p>{pos.x}</p>} />

// Modern: custom hook
const pos = useMouse();
<p>{pos.x}</p>

متى يظل Render Props مناسبًا

يظل Render Props مفيدًا عندما: (1) تحتاج إلى إدخال عرض ديناميكي في موضع محدد من شجرة المكوّنات، (2) تنشئ مكتبة مكوّنات headless تفصل المنطق عن واجهة المستخدم.

تحذير بشأن الأداء

يؤدي تعريف render prop داخل السطر إلى إنشاء دالة جديدة في كل عملية تصيير للمكوّن الأب، مما يمنع المكوّنات الفرعية PureComponent/React.memo من تخطي إعادة التصيير. استخرج دوال render prop إلى متغيّر أو دالة مستقرة.
// Avoid: new function every render
<Toggle render={pos => <Dot pos={pos} />} />

// Better: stable reference
const renderDot = pos => <Dot pos={pos} />;
<Toggle render={renderDot} />

تركيب Render Props

يؤدي تداخل مكوّنات متعددة تستخدم render prop بسرعة إلى ما يُسمّى 'render prop hell' أو 'wrapper hell' — أي دوال رد اتصال متداخلة بعمق يصعب قراءتها. وهذا أحد أسباب تقديم hooks.

Render Props في المكتبات

استخدم React Router v5 نمط Render Props مع Route. كما تستخدم Downshift وFormik وReact-Table أشكالًا مختلفة منه. ويساعدك فهم Render Props على قراءة التعليمات البرمجية التي تستخدم هذه المكتبات وتصحيحها.

اختبار سريع

ما الميزة الرئيسية لنمط Render Props مقارنةً بتمرير JSX ثابت؟

مراجعة

يمرّر Render Props دالة تُرجع JSX. يوفّر المكوّن السلوك، بينما يوفّر المكوّن المستهلِك واجهة المستخدم. فضّل Custom Hooks في React الحديثة، لكن افهم Render Props لقراءة التعليمات البرمجية الحالية وإنشاء المكوّنات headless.

التالي

الدرس التالي: **Higher-Order Components (HOCs) Explained** — ستغلّف المكوّنات لإضافة props أو حماية المسارات أو إضافة التسجيل.

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

هل درس «نمط Render Props» مجاني؟

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

ماذا ستتعلم في «نمط Render Props»؟

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

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

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

كم من الوقت يستغرق درس «نمط Render Props»؟

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

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

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

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

  1. نمط Render Props
  2. شرح المكوّنات عالية الرتبة (HOCs)
  3. HOC مقابل Render Props مقابل Custom Hooks
  4. إعادة هيكلة HOC إلى Custom Hook
← العودة إلى React Academy