0Pricing
React Academy · درس

شرح المكوّنات عالية الرتبة (HOCs)

غلّف المكوّنات لحقن الخصائص أو حماية المسارات أو إضافة التسجيل باستخدام مصانع HOC.

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

مرحبًا

في هذا الدرس ستفهم المكوّنات عالية الرتبة (HOCs)، وكيفية كتابتها، وحالات استخدامها الشائعة، والمفاضلات بينها وبين hooks.

ما هو HOC؟

المكوّن عالي الرتبة هو دالة تستقبل مكوّنًا كمدخل وتُرجع مكوّنًا جديدًا مُحسّنًا. يضيف HOC سلوكًا، مثل props أو عمليات التحقق من المصادقة أو التسجيل، من دون تعديل المكوّن الأصلي.
// HOC signature
function withEnhancement(WrappedComponent) {
  return function Enhanced(props) {
    // add behaviour here
    return <WrappedComponent {...props} extraProp="value" />;
  };
}

HOC لحماية المصادقة

يعيد HOC شائع توجيه المستخدمين غير المصادق عليهم إلى صفحة تسجيل الدخول. ولا يحتاج المكوّن الأصلي إلى معرفة منطق المصادقة.
function withAuth(Component) {
  return function AuthGuard(props) {
    const isLoggedIn = useAuth();
    if (!isLoggedIn) return <Navigate to="/login" />;
    return <Component {...props} />;
  };
}

const ProtectedPage = withAuth(DashboardPage);

HOC للتسجيل

يمكن لـ HOC تسجيل كل عملية تصيير مع اسم المكوّن وخصائصه لأغراض التصحيح. غلّف أي مكوّن باستخدام withLogger لإضافة التتبّع.
function withLogger(Component) {
  return function Logged(props) {
    console.log('[render]', Component.displayName, props);
    return <Component {...props} />;
  };
}

تمرير الخصائص

مرّر دائمًا جميع الخصائص المستلمة إلى المكوّن المغلّف باستخدام `{...props}`. يؤدي عدم فعل ذلك إلى كسر واجهة برمجة المكوّن الأصلي.
return function HOC(props) {
  return <WrappedComponent {...props} injectedProp={value} />;
};

تعيين displayName

تفقد المكوّنات التي يُرجعها HOC أسماءها في React DevTools. عيّن displayName ذا معنى حتى تتمكن من تحديدها في شجرة المكوّنات.
function withAuth(Component) {
  function AuthGuard(props) { /* ... */ }
  AuthGuard.displayName = 'withAuth(' + (Component.displayName || Component.name) + ')';
  return AuthGuard;
}

تمرير المراجع

تحجب HOCs المراجع افتراضيًا. استخدم `React.forwardRef` داخل HOC لتمرير المراجع إلى المكوّن المغلّف.
function withStyle(Component) {
  return React.forwardRef(function (props, ref) {
    return <Component ref={ref} {...props} className="styled" />;
  });
}

HOC مقابل Render Props مقابل Hooks

تضيف HOCs خصائص ويمكنها حماية المسارات. وتمرّر Render Props واجهة مستخدم ديناميكية. أما Custom Hooks فتستخرج المنطق. في React الحديثة، تُفضَّل hooks لأنها تتجنب wrapper hell، كما يسهل تركيبها. وتظل HOCs مفيدة مع مكوّنات الأصناف أو عمليات التكامل مع مكتبات خارجية.

جحيم الأغلفة

يؤدي تطبيق HOCs متعددة إلى إنشاء تداخل عميق في شجرة المكوّنات: `withTheme(withAuth(withLogger(MyPage)))`. ويعرض DevTools طبقات عديدة من الأغلفة المجهولة. وتتجنب hooks ذلك تمامًا.

استخدام HOCs في الواقع

تُعد `connect()` في Redux، و`withRouter()` في React Router v5، و`observer()` في MobX، جميعها HOCs. ويساعدك فهم HOCs على التعامل مع واجهات برمجة التطبيقات الأقدم لهذه المكتبات.

اختبار سريع

ما الذي يجب أن يفعله المكوّن عالي الرتبة دائمًا بالخصائص التي يستقبلها؟

مراجعة

HOCs هي دوال تستقبل مكوّنًا وتُرجع مكوّنًا مُحسّنًا. وتضيف الخصائص، وتحمي المسارات، وتضيف التسجيل. مرّر الخصائص دائمًا، وعيّن displayName، ومرّر المراجع. فضّل hooks في React الحديثة.

التالي

الدرس التالي: **HOC vs Render Props vs Custom Hooks** — ستقارن استراتيجيات مشاركة التعليمات البرمجية الثلاث من حيث سهولة القراءة والاختبار والتركيب.

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

هل درس «شرح المكوّنات عالية الرتبة (HOCs)» مجاني؟

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

ماذا ستتعلم في «شرح المكوّنات عالية الرتبة (HOCs)»؟

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

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

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

كم من الوقت يستغرق درس «شرح المكوّنات عالية الرتبة (HOCs)»؟

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

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

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

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

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