فهرست سرفصل‌های React
خانه (Home) مقدمه (Intro) شروع کار (Get Started) اولین اپ (First App) رندر HTML (Render HTML) ارتقا (Upgrade) آشنایی با ES6 (ES6) کلاس ها در ES6 (ES6 Classes) توابع پیکانی ES6 (ES6 Arrow Functions) متغیرها در ES6 (ES6 Variables) متد map روی آرایه ها (ES6 Array map()) دیس ترکچرینگ (تقسیم ساختاری) (ES6 Destructuring) عملگر پخش (Spread) (ES6 Spread Operator) ماژول ها در ES6 (ES6 Modules) عملگر سه تایی (Ternary) (ES6 Ternary Operator) رشته های قالبی (Template Strings) (ES6 Template Strings) مقدمه JSX (JSX Intro) عبارت ها در JSX (JSX Expressions) خصیصه ها در JSX (JSX Attributes) شرط ها در JSX (JSX If Statements) کامپوننت ها (Components) کلاس ها (Class) پراپس ها (Props) (Props) دیس ترکچرینگ پراپس ها (Props Destructuring) پراپس children (Props Children) رویدادها (Events) رندر شرطی (Conditionals) لیست ها (Lists) فرم ها (Forms) ارسال فرم (Forms Submit) فیلد Textarea (Textarea) فیلد Select (Select) چند ورودی در فرم (Multiple Inputs) چک باکس (Checkbox) دکمه های رادیویی (Radio) پورتال ها (Portals) Suspense (Suspense) استایل دهی با CSS (CSS Styling) CSS Modules (CSS Modules) CSS-in-JS (CSS-in-JS) مسیریابی (Router) (Router) ترنزیشن ها (Transitions) (Transitions) Forward Ref (Forward Ref) کامپوننت های مرتبه بالاتر (HOC) (HOC) استایل دهی با Sass (Sass) هوکس چیست؟ (What is Hooks?) هوک useState (useState) هوک useEffect (useEffect) هوک useContext (useContext) هوک useRef (useRef) هوک useReducer (useReducer) هوک useCallback (useCallback) هوک useMemo (useMemo) هوک های سفارشی (Custom Hooks) کامپایلر (Compiler) کوئیز (آزمون کوتاه) (Quiz) تمرین ها (Exercises) سیلابس (سرفصل دوره) (Syllabus) برنامه مطالعه (Study Plan) سرور (Server) آمادگی مصاحبه (Interview Prep) گواهینامه (Certificate)
نتیجه‌ای برای جستجو یافت نشد.
React

React — کامپوننت های مرتبه بالاتر (HOC) (HOC)

آخرین بروزرسانی: 1404/08/24

کامپوننت های مرتبه بالاتر (HOC) (HOC)

کامپوننت مرتبه بالاتر در ری اکت مثل قاب گوشی است. قاب گوشی ظاهر و امکانات جدید می دهد؛ خود گوشی عوض نمی شود. کامپوننت مرتبه بالاتر در ری اکت هم همین کار را برای کامپوننت ها می کند.

کامپوننت مرتبه بالاتر در ری اکت چیست؟

کامپوننت مرتبه بالاتر (Higher Order Component) یک تابع جاوااسکریپت است. این تابع یک کامپوننت می گیرد و یک کامپوننت جدید برمی گرداند.

کامپوننت جدید همان قبلی است؛ فقط کمی قوی تر شده است. مثلاً استایل اضافه می گیرد یا داده بیشتری به آن می رسد.

مثل این است که روی دفتر مشق، جلد شفاف بکشی. جلد از دفتر محافظت می کند؛ اما نوشته ها همان است.

نکته: HOC خودش «کامپوننت» نیست؛ یک «تابع سازنده کامپوننت» است.

مثال HOC: اضافه کردن کادر دور کامپوننت

در این مثال، یک HOC می سازیم که دور هر کامپوننت یک کادر آبی می کشد. خود کامپوننت اصلی هنوز ساده و تمیز می ماند.

// این HOC است؛ دور هر کامپوننت کادر می کشد
function withBorder(WrappedComponent) {
  return function NewComponent(props) {
    return (
      <div
        style={{
          border: '2px solid blue',
          padding: '10px'
        }}
      >
        <WrappedComponent
          {...props}
        />
      </div>
    );
  };
}

// کامپوننت ساده بدون کادر
function Greeting({ name }) {
  return (
    <h1>
      Hello, {name}!
    </h1>
  );
}

// ساختن نسخه دارای کادر
const GreetingWithBorder = withBorder(Greeting);

function App() {
  return (
    <div>
      <Greeting
        name="John"
      />
      <GreetingWithBorder
        name="Jane"
      />
    </div>
  );
}

مشاهده در ادیتور

گام به گام ساخت HOC با کادر

  1. تابع withBorder را تعریف کن؛ ورودی آن WrappedComponent است.
  2. داخلش یک کامپوننت جدید به نام NewComponent برگردان.
  3. در NewComponent یک div با استایل کادر آبی بساز.
  4. داخل این div کامپوننت WrappedComponent را با props اصلی رندر کن.
  5. حالا با withBorder(Greeting) یک GreetingWithBorder جدید داری.

نکته: کامپوننت Greeting عوض نشده است. فقط یک نسخه جدید کنارش ساخته ای که کادر دارد.

چه زمانی از HOC استفاده کنیم؟

بعضی کارها در چند کامپوننت تکرار می شوند. مثلاً احراز هویت (Authentication) یعنی چک کنیم کاربر لاگین است یا نه.

یا گرفتن داده از سرور در چند جای مختلف. کامپوننت مرتبه بالاتر در ری اکت این الگوهای تکراری را یک جا نگه می دارد.

  • پیچیدن کامپوننت های محافظت شده پشت یک HOC احراز هویت
  • اضافه کردن لاگ و گزارش گیری به چند کامپوننت مختلف
  • گرفتن داده مشترک و دادن آن به چند صفحه

نکته: امروز خیلی وقت ها به جای HOC از هوک ها (Hooks) استفاده می کنیم. اما برای بعضی الگوهای سراسری هنوز HOC گزینه خوبی است.

بعد از یادگیری کامپوننت مرتبه بالاتر در ری اکت می توانی سراغ Forward Ref در ری اکت و استایل دهی Sass در ری اکت هم بروی.

جمع بندی سریع

  • کامپوننت مرتبه بالاتر در ری اکت یک تابع سازنده کامپوننت است.
  • HOC کامپوننت ورودی را نمی شکند؛ فقط به آن قابلیت می افزاید.
  • برای کارهای تکراری مثل احراز هویت و گرفتن داده عالی است.
  • در پروژه های جدید، هوک ها معمولاً ساده ترند؛ اما HOC هنوز کاربرد دارد.