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

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

Compound & Render Props in React - Part 1

  • Oussama Djaidri by Oussama Djaidri
    Oussama Djaidri Oussama Djaidri
    Front-End Engineer
    • Website
  • •
  • ٢٥ ديسمبر، ٢٠٢٣
  • •
  • 5 min read
  • Share on X
  • Share on Facebook
  • Share on LinkedIn
  • Share on Pinterest
  • Email
Compound & Render Props in React - Part 1
Compound & Render Props in React - Part 1
  • Frontend
  • React
  • Technologies & Frameworks

في عالم تطوير واجهات المستخدم الحديث، أصبحت إعادة الاستخدام Reusability و التخصيص Customization من الجوانب الأساسية التي يتوجب على المطورين النظر فيها. مع تزايد تعقيد المشاريع و توسع نطاق التطبيقات، أصبح البحث عن أساليب فعالة لبناء مُكونات قابلة لإعادة الاستخدام و سهلة التخصيص أمرًا لا غنى عنه.

تتمتع مكتبة React بأنماط تصميم  Design Patterns شائعة. دعونا نستعرض معًا في هذا المقال كيف يُمكننا الجمع بين إعادة الاستخدام و قابلية التخصيص باستخدام نمطي التصميم Render Props و Compound Pattern وكيف يُسهمان في بناء واجهات مستخدم مرنة.

هذا المقال سيكون مُقسم إلى جزأين حيث في الجزء الأول سنتطرق إلى الـ Compound Pattern، بينما في الجزء الثاني سنقوم بالتطرق إلى الـ Render Props.

تعريف نمط التصميم Compound Pattern

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

الآن، سنقوم بالانتقال إلى تطبيق عملي لنمط التصميم Compound Pattern، حيث سنبني مُكون شريط التقدم Progress Bar  و سيكون هذا الأخير headless، مما يعني أنه لن يتضمن أي تنسيقات CSS و هذا سيُعطي للمستخدمين الحرية التامة في طريقة تنسيق المكون حسب احتياجاتهم. لاحقا في الكود المصدري الكامل المُرفق مع هذا المقال حتى يكون بالإمكان رؤية الأمثلة لاستخدام المُكون و تخصيصه ستجد أنني استخدمت Panda CSS من ناحية التنسيق.

يمكن الوصول للكود المصدري الكامل لهذا الشرح على GitHub من خلال الرابط التالي: اضغط هنا.

الخطوة الأولى: إنشاء خطاف مُخصص Custom Hook بالاعتماد على React Aria

سنقوم أولاً بإنشاء Custom Hook يعتمد على مكتبة React Aria. سيسمح لنا هذا الـ Hook بإنشاء Progress Bar ذي امكانية وصول عالية High Accessibility.

لقد فصلنا الـ Logic Code في Custom Hook بدلا من إدارة كل شيء في نفس ملف المُكون لعدة أسباب:

  • إعادة الاستخدام: من خلال وضع الكود المتعلق بإدارة كل التفاصيل و العمليات التي يحتاجها المُكون للعمل بالشكل المطلوب في Custom Hook يمكننا الاستفادة منه في عدة أماكن دون الحاجة إلى إعادة كتابته كل مرة و هذا يعزز فعالية إعادة الاستخدام و يُقلل من التكرار، مما يُساهم في توفير الوقت والجهد في التطوير.
  • تنظيم كود المُكون: تجنب تعقيد كود المكون الرئيسي مما يجعله أكثر وضوحًا وسهل القراءة.
  • سهولة الصيانة: يجعل من السهل فهم وصيانة الكود. يمكن للمطورين التركيز على تفاصيل المكون الرئيسي دون الحاجة إلى التعامل مع كل تفاصيل العمليات الداخلية.
  • تحسين قابلية الاختبار: يُصبح من السهل إجراء اختبارات أحادية ‘Unit Tests’ مما يزيد من جودة الكود.

تحقيق أحد مبادىء الـ SOLID و هو مبدأ Single Responsibility: عندما نقوم بفصل مسؤولية العرض عن مسؤولية المنطق، فإننا نضمن أن المكون الرئيسي يركز فقط على عرض البيانات، بينما يتم التعامل مع جميع العمليات الفنية و المنطقية الأخرى في مكان منفصل.

هذا المقال مخصص للأعضاء فقط

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

اشترك الآن 🚀

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

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

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

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

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

  • 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©