logo by @sawaratsuki1004
React
v19.2
Learn
Reference
Community
Blog

Is this page useful?

في هذه الصفحة

  • Overview
  • المكونات: حجر بناء واجهة المستخدم
  • تعريف المكوّن
  • الخطوة الأولى: تصدير المكوّن
  • الخطوة الثانية: تعريف الدالة
  • الخطوة الثالثة: أضف الترميز المرئي
  • استخدام المكوّن
  • ما يراه المتصفح
  • تضمين وتنظيم المكوّنات
  • Recap
  • Challenges

    البدأ

  • بداية سريعة
    • شرح تطبيقي: لعبة تيك تاك تو
    • التفكير على طريقة React
  • التثبيت
    • إنشاء تطبيق React
    • بناء تطبيق React من الصفر
    • إضافة React إلى مشروع موجود بالفعل
  • الإعداد
    • تجهيز المحرر
    • استخدام TypeScript
    • أدوات مطوري React
  • React Compiler
    • مقدمة
    • التثبيت
    • التبني التدريجي
    • تصحيح الأخطاء واستكشاف المشاكل
  • تعلم React

  • وصف واجهة المستخدم (UI)
    • مكونك الأول (Component)
    • استيراد وتصدير المكونات (Components)
    • كتابة ترميز البناء بـ JSX
    • JavaScript في JSX باستخدام الأقواس المنحنية
    • تمرير الخصائص (Props) إلى مكون
    • التصيير الشرطي (Conditional Rendering)
    • تصيير القوائم (Rendering Lists)
    • الحفاظ على نقاء المكونات (Pure Components)
    • واجهتك المستخدم كشجرة (UI Tree)
  • إضافة التفاعلية (Interactivity)
    • الاستجابة للأحداث (Events)
    • الحالة (State): ذاكرة المُكَوِّن
    • التصيير والالتزام (Render and Commit)
    • الحالة (State) كلقطة
    • إضافة سلسلة من تحديثات الحالة (State) إلى قائمة انتظار
    • تحديث الكائنات (Objects) في الحالة
    • تحديث المصفوفات (Arrays) في الحالة
  • إدارة State
    • التفاعل مع Input باستخدام State
    • اختيار بنية State
    • مشاركة State بين Components
    • الحفاظ على State وإعادة ضبطها
    • استخراج منطق State إلى Reducer
    • تمرير البيانات بشكل عميق باستخدام Context
    • التوسع باستخدام Reducer و Context
  • مخارج الطوارئ (Escape Hatches)
    • الإشارة إلى القيم باستخدام Refs
    • التلاعب بـ DOM باستخدام Refs
    • التزامن مع Effects
    • قد لا تحتاج إلى Effect
    • دورة حياة Reactive Effects
    • فصل Events عن Effects
    • إزالة اعتماديات Effect
    • إعادة استخدام المنطق باستخدام Custom Hooks
تعلم React
وصف واجهة المستخدم (UI)

مكوّنك الأول

المكونات هي إحدى المفاهيم الرئيسية في React. هي الأساس الذي تبني عليه واجهات المستخدم. مما يجعلها المكان الصحيح لبدأ رحلتك مع React.

You will learn

  • ما هو المكوّن
  • ما الدور الذي تلعبه المكوّنات في تطبيق React
  • كيف تكتب أول مكوّن React

المكونات: حجر بناء واجهة المستخدم

في الويب، تمكننا HTML من إنشاء صفحات مبنية بجدارة بالعديد من عناصرها المدمَجة مثل <h1> و <li>:

<article> <h1>مكوّني الأول</h1> <ol> <li>المكوّنات: حجر بناء واجهة المستخدم</li> <li>تعريف المكوّن</li> <li>استخدام المكوّن</li> </ol> </article>

يمثل هذا الترميز هذه المقالة <article>، عنوانها <h1>، وفهرس محتويات مختصر في شكل قائمة مرتبة <ol>. ترميز كهذا, مع بعض CSS للأنماط التصميمية, وJavaScript من أجل التفاعلية، يكمن وراء كل شريط جانبي، أو صورة رمزية، أو نافذة، أو قائمة منسدلة - أو أي قطعة من واجهة مستخدم تراها في الويب.

تمكنك React من دمج الترميز، وCSS، وJavaScript في “مكونات” مخصصة، عناصر واجهة المستخدم قابلة لإعادة الاستخدام في تطبيقك. يمكن تحويل كود فهرس المحتوى الذي رأيته أعلاه إلى مكوّن <TableOfContents /> الذي يمكن تصييره في كل صفحة. لا يزال يستخدم هذا المكوّن خلف الكواليس وسوم مثل <article> ،<h1>، إلخ.

تمامًا مثل عناصر HTML، يمكنك تجميع وترتيب وتضمين المكوّنات لتصميم صفحات كاملة. على سبيل المثال، صفحة المستندات التي تقرأها مصنوعة من مكوّنات React.

<PageLayout> <NavigationHeader> <SearchBar /> <Link to="/docs">المستندات</Link> </NavigationHeader> <Sidebar /> <PageContent> <TableOfContents /> <DocumentationText /> </PageContent> </PageLayout>

مع نمو مشروعك، ستلاحظ أنه يمكن تجميع العديد من تصاميمك بواسطة إعادة استخدام مكوّنات كتبتها مسبقا، مما يسرع عملية التطوير. يمكن إضافة فهرس المحتويات أعلاه إلى أي شاشة عن طريق <TableOfContents />! يمكنك أيضا الانطلاق بسرعة في مشروعك باستخدام آلاف المكوّنات التي ينشرها مجتمع React مفتوحة المصدر مثل Chakra UI و Material UI..

تعريف المكوّن

قديمًا، عند إنشاء صفحات الويب، كان مطورو الويب يقومون بترميز المحتوى الخاص بهم ومن ثم يضيفون التفاعل عن طريق إضافة بعض JavaScript. نجح هذا بشكل رائع عندما كان التفاعل مجرد ميزة إضافية جيدة على الويب. الآن يُتوقع وجود التفاعل في العديد من المواقع وجميع التطبيقات. تضع React التفاعلية في المقام الأول مع الاستمرار في استخدام نفس التقنية: مكوّن React هو دالة JavaScript يمكنك أن تُضيف إليها ترميز مرئي. هنا مثال لذلك (يمكنك تحرير المثال أدناه):

export default function Profile() { return ( <img src="https://i.imgur.com/MK3eW3Am.jpg" alt="كاثرين جونسون" /> ) }

وهنا كيفية بناء مكوّن:

الخطوة الأولى: تصدير المكوّن

البادئة export default هي جزء من صيغة JavaScript القياسية (ليست خاصة بـ React). تتيح لك وضع علامة على الدالة الرئيسية في ملف بحيث يمكنك استيرادها لاحقًا من ملفات أخرى. (للمزيد عن الاستيراد، راجع موضوع استيراد وتصدير المكوّنات!)

الخطوة الثانية: تعريف الدالة

باستخدام الدالة Profile() { } ، تقوم بتعريف دالة JavaScript بإسم “Profile”.

مأزق

مكوّنات React هي عبارة عن دوال JavaScript عادية، ولكن يجب أن تبدأ أسماءها بحرف كبير، وإلا فلن تعمل بشكل صحيح!

الخطوة الثالثة: أضف الترميز المرئي

يقوم المكوّن بإرجاع عنصر <img /> مع خواص src و alt. يتم كتابة <img /> بنفس طريقة كتابة HTML، ولكنه في الواقع JavaScript خلف الكواليس! يُطلق على هذه الصيغة JSX، وتتيح لك تضمين ترميز مرئي داخل JavaScript.

يمكن كتابة عبارات الإرجاع في سطر واحد، كما في هذا المكوّن:

return <img src="https://i.imgur.com/MK3eW3As.jpg" alt="كاثرين جونسون" />;

ولكن إذا لم يكن الترميز موجودًا في نفس السطر مع عبارة return، فيجب عليك وضعه بين قوسين:

return ( <div> <img src="https://i.imgur.com/MK3eW3As.jpg" alt="كاثرين جونسون" /> </div> );

مأزق

بدون الأقواس, سيتم تجاهل أي كود في الأسطر التي تلي عبارة return!

استخدام المكوّن

الآن بعد تعريفك لمكون Profile، يمكنك تضمينه داخل مكوّنات أخرى. على سبيل المثال، يمكنك تصدير مكون Gallery الذي يستخدم عدة مكونات Profile:

function Profile() { return ( <img src="https://i.imgur.com/MK3eW3As.jpg" alt="كاثرين جونسون" /> ); } export default function Gallery() { return ( <section> <h1>علماء رائعون</h1> <Profile /> <Profile /> <Profile /> </section> ); }

ما يراه المتصفح

لاحظ الفرق في حالة الأحرف:

  • <section> بحرف صغير s، لذا تعرف React أننا نشير إلى عنصر HTML.
  • <Profile /> يبدأ بحرف P كبير, لذا تعرف React أننا نريد استخدام مكوّننا الذي اسمه Profile.

ومكوّن Profile يحتوي على المزيد من HTML:<img />. في النهاية، هذا ما يراه المتصفح:

<section> <h1>علماء رائعون</h1> <img src="https://i.imgur.com/MK3eW3As.jpg" alt="كاثرين جونسون" /> <img src="https://i.imgur.com/MK3eW3As.jpg" alt="كاثرين جونسون" /> <img src="https://i.imgur.com/MK3eW3As.jpg" alt="كاثرين جونسون" /> </section>

تضمين وتنظيم المكوّنات

المكوّنات هي دوال JavaScript عادية، لذا يمكنك الاحتفاظ بعدة مكوّنات في نفس الملف. هذا مناسب عندما تكون المكوّنات صغيرة نسبيًا أو تتعلق بشكل وثيق ببعضها البعض. إذا أصبح الملف مكتظًا، يمكنك دائمًا نقل المكوّن Profile إلى ملف منفصل. ستتعلم كيفية فعل ذلك قريبًا في الصفحة التي تتحدث عن الاستيرادات..

نظرًا لأن مكوّنات Profile يتم تصييرها داخل مكوّن Gallery - وحتى لعدة مرات! - يمكننا القول بأن مكون Gallery هو المكوّن الأب، الذي يقوم بتصيير كل مكوّن Profile كـ “ابن” . هذا جزء من سحر React: يمكنك تعريف مكوّن مرة واحدة، ثم استخدامه في العديد من الأماكن والعديد من المرات كما تريد.

مأزق

يمكن للمكوّنات عرض مكوّنات أخرى، ولكن يجب ألا تقوم أبدا بتضمين تعريفها داخل بعضها البعض.

export default function Gallery() { // 🔴 لا تقم أبدا بتعريف مكوّن داخل مكوّن اخر function Profile() { // ... } // ... }

الكود السابق بطيء جدًا ويسبب أخطاء. بدلاً من ذلك، قم بتعريف كل مكوّن على المستوى الأعلى

export default function Gallery() { // ... } // ✅ قم بتعريف المكوّنات على المستوى الأعلى function Profile() { // ... }

عندما يحتاج المكوّن الابن إلى الحصول على بعض البيانات من المكوّن الأب، يتم تمريرها كخواص بدلاً من تضمين تعريفاتها.

غوص عميق

مكوّنات على طول الطريق

يبدأ تطبيق React الخاص بك في مكوّن “الجذر”. عادةً ما يتم إنشاؤه تلقائيًا عند بدء مشروع جديد. على سبيل المثال، إذا كنت تستخدم CodeSandbox، يتم تعريف مكون الجذر في src/App.js. إذا كنت تستخدم إطار العمل Next.js، يتم تعريف مكون الجذر في pages/index.js. في هذه الأمثلة، كنت تقوم بتصدير مكونات الجذر.

معظم تطبيقات React تستخدم مكوّنات على طول الطريق. وهذا يعني أنك لن تستخدم المكونات فقط للأجزاء القابلة لإعادة الاستخدام مثل الأزرار، ولكن أيضًا للأجزاء الأكبر مثل الأشرطة الجانبية، والقوائم، وفي النهاية، الصفحات الكاملة! المكوّنات هي وسيلة مفيدة لتنظيم كود واجهة المستخدم والترميز المرئي، حتى لو كان بعضها لا يستخدم سوى مرة واحدة.

أطر العمل المبنية على React تأخذ خطوة إضافية. بحيث بدلاً من استخدام ملف HTML فارغ والسماح لـ React بـ “الاستيلاء” على إدارة الصفحة بواسطة JavaScript، فإنها أيضًا تقوم بتوليد كود الـ HTML تلقائيًا من مكوّنات React الخاصة بك. هذا يسمح لتطبيقك بعرض بعض المحتوى قبل تحميل كود JavaScript.

ومع ذلك، لا تزال هناك العديد من المواقع التي تستخدم React فقط لإضافة التفاعلية إلى صفحات HTML الموجودة مسبقا. فلديها العديد من المكوّنات الجذرية بدلاً من وجود مكوّن جذر واحد للصفحة بأكملها. يمكنك استخدام React بالمقدار الذي تحتاج إليه.

خلاصة

لقد حصلت للتو على لمحة أولى عن React! دعنا نلخص بعض النقاط الرئيسية.

  • تمكنك React من إنشاء مكوّنات، عناصر واجهة المستخدم قابلة لإعادة الاستخدام لتطبيقك

  • في تطبيق React، كل قطعة من واجهة المستخدم تمثل مكوّن

  • مكوّنات React هي عبارة عن دوال JavaScript عادية ما عدا أن:

    1. اسمها يبدأ دائما بحرف كبير.
    2. تقوم بإرجاع ترميز مرئي JSX

جرّب بعض التحديات

تحدي 1 من 4:
قم بتصدير المكوّن

هذا الكود لا يعمل لأن المكوّن الجذري لم يتم تصديره

function Profile() { return ( <img src="https://i.imgur.com/lICfvbD.jpg" alt="أكليلو ليما" /> ); }

حاول إصلاحه بنفسك قبل أن تلقي نظرة على الحل!

السابقوصف واجهة المستخدم (UI)
التالياستيراد وتصدير المكونات (Components)

Copyright © Meta Platforms, Inc
no uwu plz
uwu?
Logo by@sawaratsuki1004
تعلم React
بداية سريعة
التثبيت
وصف واجهة المستخدم (UI)
إضافة التفاعلية
إدارة State
مخارج الطوارئ
مرجع API
React APIs
React DOM APIs
المجتمع
ميثاق السلوك
تعرف على الفريق
المساهمون في التوثيق
شكر وتقدير
المزيد
المدونة
React Native
الخصوصية
الشروط
<article>
<h1>مكوّني الأول</h1>
<ol>
<li>المكوّنات: حجر بناء واجهة المستخدم</li>
<li>تعريف المكوّن</li>
<li>استخدام المكوّن</li>
</ol>
</article>
<PageLayout>
<NavigationHeader>
<SearchBar />
<Link to="/docs">المستندات</Link>
</NavigationHeader>
<Sidebar />
<PageContent>
<TableOfContents />
<DocumentationText />
</PageContent>
</PageLayout>
Fork
export default function Profile() {
  return (
    <img
      src="https://i.imgur.com/MK3eW3Am.jpg"
      alt="كاثرين جونسون"
    />
  )
}

return <img src="https://i.imgur.com/MK3eW3As.jpg" alt="كاثرين جونسون" />;
return (
<div>
<img src="https://i.imgur.com/MK3eW3As.jpg" alt="كاثرين جونسون" />
</div>
);
Fork
function Profile() {
  return (
    <img
      src="https://i.imgur.com/MK3eW3As.jpg"
      alt="كاثرين جونسون"
    />
  );
}

export default function Gallery() {
  return (
    <section>
      <h1>علماء رائعون</h1>
      <Profile />
      <Profile />
      <Profile />
    </section>
  );
}

<section>
<h1>علماء رائعون</h1>
<img src="https://i.imgur.com/MK3eW3As.jpg" alt="كاثرين جونسون" />
<img src="https://i.imgur.com/MK3eW3As.jpg" alt="كاثرين جونسون" />
<img src="https://i.imgur.com/MK3eW3As.jpg" alt="كاثرين جونسون" />
</section>
export default function Gallery() {
// 🔴 لا تقم أبدا بتعريف مكوّن داخل مكوّن اخر
function Profile() {
// ...
}
// ...
}
export default function Gallery() {
// ...
}

// ✅ قم بتعريف المكوّنات على المستوى الأعلى
function Profile() {
// ...
}
Fork
function Profile() {
  return (
    <img
      src="https://i.imgur.com/lICfvbD.jpg"
      alt="أكليلو ليما"
    />
  );
}