Skip to Sidebar Skip to Content
اقرأ-تك اقرأ-تك
ضيفنا الكريم

  • تسجيل الدخول
  • الرئيسية
  • المقالات
  • خطط الاشتراك
  • - اصدارتنا
  • ورقة وقلم
  • مدونات فطين
  • شنطة مبرمج
  • النشرة الأسبوعية
  • كنوز
  • - تعرف علينا
  • من نحن
  • الشراكات
  • كتاب المحتوى
  • اكتب معنا
  • تواصل معنا
  • - بنود الخدمة
  • سياسة الخصوصية
  • الشروط والأحكام
الوسوم
  • Backend
  • Distributed Systems
  • System Design
  • Databases
  • LinkedIn
  • X
  • Facebook
  • Telegram
  • GitHub
جميع الحقوق محفوظة لمنصة اقرأ-تِك 2024©

Unlocking Flexibility: Compound & Render Props in React - Part 2

  • Oussama Djaidri by Oussama Djaidri
    Oussama Djaidri Oussama Djaidri
    Front-End Engineer
    • Website
  • •
  • ٢ يناير، ٢٠٢٤
  • •
  • 3 min read
  • Share on X
  • Share on Facebook
  • Share on LinkedIn
  • Share on Pinterest
  • Email
Unlocking Flexibility: Compound & Render Props in React - Part 2
Compound & Render Props in React - Part 2
  • Frontend
  • React
  • Technologies & Frameworks

في الجزء الأول من المقال رابط الجزء الاول من المقال هنا اكتشفنا نمط الـ Compound الذي يُمكننا من إنشاء مكونات مرنة يُمكن تخصيصها بسهولة وفقًا لاحتياجاتنا المُحددة. في هذا الجزء سنستخدم نمط يُسمى بـ Render Props و الذي سيسمح بتبسيط الشيفرة البرمجية من ناحية الاستخدام و التي ستُعطينا تجربة تخصيص و وصول إلى القيم التي تتشاركها أجزاء المُكون Progress Bar في غاية البساطة.

التحسينات المُقترحة على الكود

في النسخة الحالية من الكود، يتم كتابة طريقة لحساب النسبة، وكذلك إنشاء متغيرات حالة state variables لتخزين قيم minValue و maxValue.

غالبًا ما تكون قيمة value هي المُتغير الوحيد في المكون، وعادة ما تكون قيم minValue و maxValue ثابتة عند 0 و 100. حتى طريقة حساب النسبة percentage في غالب الأوقات ثابتة.

لماذا نجعل المستخدم مسؤولًا عن هذه القيم؟ بينما يمكننا تسهيل الاستخدام عن طريق اضافتهم و جعلهم من مسؤوليات المُكون بدلا من المُستخدم.

1 - ادارة القيم بشكل داخلي

في الكود الحالي، يُطلب من المستخدم تحديد قيم minValue و maxValue بالإضافة إلى value. لنجعل الاستخدام أكثر سهولة، دعونا ندير هذه القيم بشكل داخلي ونقدم قيم افتراضية لـ minValue و maxValue مع امكانية تخصيصهم و بالتالي سنستطيع استخدام المُكون كالتالي:

<ProgressBar value={18} aria-label="Progress bar">
  {/* ... */}
</ProgressBar>

<ProgressBar value={18} aria-label="Progress bar" minValue={0} maxValue={10}>
  {/* ... */}
</ProgressBar>

2 - حساب النسبة داخليا

تسهيلًا على المستخدم، سنقوم بحساب النسبة المئوية داخليًا دون الحاجة لكتابة الكود الخاص بها و أيضا بدون تمريها كـ Prop للمُكون ProgressBarIndicator.

<ProgressBarTrack>
	<ProgressBarIndicator /> {/* OLD CODE: <ProgressBarIndicator percentage={percentage} /> */}
</ProgressBarTrack>

3 - الوصول للقيم الداخلية المُشتركة في باقي المُكونات

باستخدام نمط الـ Render Props، سيصبح بإمكان المستخدم الوصول بسهولة إلى القيم الداخلية المشتركة في جميع أجزاء المُكونات و هذا سيُمكّن من تخصيص عرض القيم واستخدامها بأي شكل يُناسب الاحتياجات.

<ProgressBar
  value={7}
  aria-label="Progress bar"
>
  <ProgressBarLabel label="Progress">
    {({ label, percentage }) => (
      <div
        className={css({
          display: "flex",
          justifyContent: "space-between",
        })}
      >
        <span>{label}</span>
        <span>
          {percentage ? <>{percentage.toFixed(0)}%</> : <>Loading...</>}
        </span>
      </div>
    )}
  </ProgressBarLabel>
  <ProgressBarTrack>
    <ProgressBarIndicator />
  </ProgressBarTrack>
</ProgressBar>

تعريف نمط الـ Render Props

هذا المقال مخصص للأعضاء المنتسبين لخطط الاشتراك المدفوعة فقط

اشترك الآن وتصفح كافة المقالات المميزة واستمتع بمحتوى حصري وابق على اطلاع دائم بالتحديثات المستمرة.

اشترك الآن 🚀

هل لديك حساب؟ تسجيل الدخول

في هذا المقال
اشترك الآن واكمل قراءة المقال
قناة اقرأ-تِك على التليجرام قناة اقرأ-تِك على التليجرام

اشترك الآن بنشرة اقرأ‑تِك الأسبوعية

لا تدع أي شيء يفوتك. واحصل على أحدث المقالات المميزة مباشرة إلى بريدك الإلكتروني وبشكل مجاني!

مقالات ذات صلة

  • Browser & Server Negotiation Behind The Scene 2 min read

    Browser & Server Negotiation Behind The Scene

    Saeed Khaled Saeed Khaled • ٢٢ أبريل، ٢٠٢٥
    Saeed Khaled Saeed Khaled
    Frontend Developer
    • Website
  • Introduction Into Robots.txt 1 min read

    Introduction Into Robots.txt

    Saeed Khaled Saeed Khaled • ٥ أبريل، ٢٠٢٥
    Saeed Khaled Saeed Khaled
    Frontend Developer
    • Website
  • Tailwindcss 1 min read

    Tailwindcss

    Alaa Elkzaz Alaa Elkzaz • ٣١ مارس، ٢٠٢٥
    Alaa Elkzaz Alaa Elkzaz
    Co-Founder & Software Engineer
    • Website
  • Cross-Tab Communication with Broadcast Channel API 1 min read

    Cross-Tab Communication with Broadcast Channel API

    Ahmed Saber Ahmed Saber • ٢٧ فبراير، ٢٠٢٥
    Ahmed Saber Ahmed Saber
    Front-End Engineer
    • Facebook
    • Website
  • Introduction Into Cascade in CSS Part 2 2 min read

    Introduction Into Cascade in CSS Part 2

    Ibrahim Harchiche Ibrahim Harchiche • ١١ فبراير، ٢٠٢٥
    Ibrahim Harchiche Ibrahim Harchiche
    Frontend Developer
    • Website
  • NextJS Caching Mechanisms 1 min read

    NextJS Caching Mechanisms

    Ali Alaa El-Din Ali Alaa El-Din • ١١ فبراير، ٢٠٢٥
    Ali Alaa El-Din Ali Alaa El-Din
    Front End Developer
    • Website
  • HTTP Caching 2 min read

    HTTP Caching

    Saeed Khaled Saeed Khaled • ٢٩ يناير، ٢٠٢٥
    Saeed Khaled Saeed Khaled
    Frontend Developer
    • Website
  • Closures in JavaScript 2 min read

    Closures in JavaScript

    Abdallah Elnashar Abdallah Elnashar • ٢٦ يناير، ٢٠٢٥
    Abdallah Elnashar Abdallah Elnashar
    Frontend Developer
    • Website
  • Race Conditions in Frontend 3 min read

    Race Conditions in Frontend

    Saeed Khaled Saeed Khaled • ٢٨ ديسمبر، ٢٠٢٤
    Saeed Khaled Saeed Khaled
    Frontend Developer
    • Website
  • React Props Best Practices for Handling Large Objects 1 min read

    React Props Best Practices for Handling Large Objects

    Ahmed Hany Ahmed Hany • ٢٢ ديسمبر، ٢٠٢٤
    Ahmed Hany Ahmed Hany
    Frontend Developer
    • Website
اقرأ-تك اقرأ-تك
  • الرئيسية
  • المقالات
  • خطط الاشتراك
  • - اصدارتنا
  • ورقة وقلم
  • مدونات فطين
  • شنطة مبرمج
  • النشرة الأسبوعية
  • كنوز
  • - تعرف علينا
  • من نحن
  • الشراكات
  • كتاب المحتوى
  • اكتب معنا
  • تواصل معنا
  • - بنود الخدمة
  • سياسة الخصوصية
  • الشروط والأحكام
الوسوم
  • Backend
  • Distributed Systems
  • System Design
  • Databases
  • LinkedIn
  • X
  • Facebook
  • Telegram
  • GitHub
جميع الحقوق محفوظة لمنصة اقرأ-تِك 2024©