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

Is this page useful?

في هذه الصفحة

  • Overview
  • JSX: وضع علامات البناء داخل الجافاسكربت
  • تحويل HTML إلى JSX
  • قواعد JSX
  • 1. إعادة عنصر جذر واحد
  • 2. أغلق كل العلامات
  • 3. اكتب camelCase لكل الأشياء لمعظم الأشياء!
  • نصيحة احترافية: استخدم محول JSX
  • 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)

كتابة ترميز البناء بـ JSX

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

You will learn

  • لماذا يمزج React بين علامات البناء ومنطق التصيير
  • كيف يختلف JSX عن HTML
  • كيفية عرض المعلومات باستخدام JSX

JSX: وضع علامات البناء داخل الجافاسكربت

تم بناء الويب على HTML و CSS و JavaScript. لعدة سنوات، وضع مطورو الويب المحتوى داخل HTML، والتصميم داخل CSS، والمنطق داخل JavaScript - في أغلب الأحيان في ملفات منفصلة! تم وضع بناء الصفحة داخل HTML في حين أن منطق الصفحة بقي منفصلاً في JavaScript:

ترميز HTML بخلفية بنفسجية و div يحتوي على علامتي p و form كطفلين له.
ترميز HTML بخلفية بنفسجية و div يحتوي على علامتي p و form كطفلين له.

HTML

ثلاثة معالجي JavaScript بخلفية صفراء: onSubmit، onLogin، و onClick.
ثلاثة معالجي JavaScript بخلفية صفراء: onSubmit، onLogin، و onClick.

JavaScript

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

الصورة تصف المكون في React الذي يحتوي على ترميز HTML و JavaScript مختلط من الأمثلة السابقة. اسم الدالة هو "Sidebar" التي تستدعي الدالة "isLoggedIn" المميزة باللون الأصفر. ومدرجة داخل الدالة المميزة باللون الأرجواني، علامة p من السابق، وعلامة form تشير إلى المكون المعروض في الرسم التوضيحي التالي.
الصورة تصف المكون في React الذي يحتوي على ترميز HTML و JavaScript مختلط من الأمثلة السابقة. اسم الدالة هو "Sidebar" التي تستدعي الدالة "isLoggedIn" المميزة باللون الأصفر. ومدرجة داخل الدالة المميزة باللون الأرجواني، علامة p من السابق، وعلامة form تشير إلى المكون المعروض في الرسم التوضيحي التالي.

مكوّن React Sidebar.js

مكون React يحتوي على ترميز HTML و JavaScript مختلط من الأمثلة السابقة. اسم الدالة هو Form وتحتوي على معالجين onClick و onSubmit المميزين باللون الأصفر. بعد المعالجين يأتي HTML المميز باللون الأرجواني. يحتوي ال HTML على عنصر form مضمن مع عنصر input، يحتوي كل منهما على خاصية onClick.
مكون React يحتوي على ترميز HTML و JavaScript مختلط من الأمثلة السابقة. اسم الدالة هو Form وتحتوي على معالجين onClick و onSubmit المميزين باللون الأصفر. بعد المعالجين يأتي HTML المميز باللون الأرجواني. يحتوي ال HTML على عنصر form مضمن مع عنصر input، يحتوي كل منهما على خاصية onClick.

مكوّن ReactForm.js

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

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

ملاحظة

JSX و React هما شيئان منفصلان عن بعضهما البعض. غالبًا ما يتم استخدامهما معًا، ولكن يمكنك استخدام أحدهما بشكل مستقل. JSX هو امتداد لكود البناء، بينما React مكتبة لـ JavaScript.

تحويل HTML إلى JSX

لنفترض أن لديك بعض أكواد HTML (الصالحة تمامًا).

<h1>مَهمَّات هايدي ليمار</h1> <img src="https://i.imgur.com/yXOvdOSs.jpg" alt="هايدي" class="photo" > <ul> <li>اختراع إشارات المرور <li>إعادة تمثيل مشهد من فيلم <li>تحسين بعض التكنولوجيا </ul>

وتريد وضعها في مكونك

export default function TodoList() { return ( // ??? ) }

إن نسختها ولصقتها لن تعمل

export default function TodoList() { return ( // هذا لا بعمل <h1>مَهمَّات هايدي ليمار</h1> <img src="https://i.imgur.com/yXOvdOSs.jpg" alt="هايدي" class="photo" > <ul> <li>اختراع إشارات المرور <li>إعادة تمثيل مشهد من فيلم <li>تحسين بعض التكنولوجيا </ul> ); }

هذا لأن JSX أكثر صرامة ولديه بعض القواعد الإضافية مقارنة بـ HTML! إذا قرأت رسائل الخطأ أعلاه، فسترشدك إلى إصلاح العلامات، أو يمكنك اتباع الدليل أدناه.

ملاحظة

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

قواعد JSX

1. إعادة عنصر جذر واحد

لإعادة عناصر متعددة من مكون، قم بتجميعها في عنصر واحد فقط.

على سبيل المثال، يمكنك استخدام <div>:

<div> <h1>مَهام هايدي ليمار</h1> <img src="https://i.imgur.com/yXOvdOSs.jpg" alt="هايدي" class="photo" > <ul> ... </ul> </div>

إن كنت لا تريد إضافة <div> إضافي لبناءك، يمكنك كتابة <> و </> بدلاً من ذلك:

<> <h1>مَهام هايدي ليمار</h1> <img src="https://i.imgur.com/yXOvdOSs.jpg" alt="هايدي" class="photo" > <ul> ... </ul> </>

هذا العنصر الفارغ يسمى الأجزاء (Fragments). تسمح لك الأجزاء بتجميع الأشياء دون ترك أي أثر في شجرة HTML في المتصفح.

غوص عميق

لماذا يجب عليك تجميع عناصر JSX في عنصر واحد؟

يبدو JSX مثل HTML، لكنه في الحقيقة يتم تحويله إلى كائنات JavaScript عادية. لا يمكنك إرجاع كائنين من دون تجميعهما في مصفوفة. هذا يفسر لماذا لا يمكنك إرجاع علامتي JSX من دون تجميعهما في علامة أخرى أو في أجزاء.

2. أغلق كل العلامات

يتطلب JSX إغلاق العلامات بشكل صريح: العلامات المغلقة ذاتيًا مثل <img> يجب أن تصبح <img />، والعلامات الملفوفة مثل <li>oranges يجب أن تكتب كـ <li>oranges</li>.

هذا هو شكل صورة هايدي ليمار وعناصر القائمة المغلقة:

<> <img src="https://i.imgur.com/yXOvdOSs.jpg" alt="هايدي" class="photo" /> <ul> <li>اختراع إشارات المرور</li> <li>إعادة تمثيل مشهد من فيلم</li> <li>تحسين بعض التكنولوجيا</li> </ul> </>

3. اكتب camelCase لكل الأشياء لمعظم الأشياء!

يتحول JSX إلى JavaScript والسمات المكتوبة في JSX تصبح مفاتيح لكائنات JavaScript. في مكوناتك الخاصة، ستريد في كثير من الأحيان قراءة تلك السمات في متغيرات. لكن JavaScript لديه قيود على أسماء المتغيرات. على سبيل المثال، لا يمكن أن تحتوي أسماءهم على شرطات أو تكون كلمات محجوزة مثل class.

لهذا السبب، في React، تكتب العديد من السمات HTML و SVG بـ camelCase. على سبيل المثال، بدلاً من stroke-width تستخدم strokeWidth. نظرًا لأن class هي كلمة محجوزة، في React تكتب className بدلاً من ذلك، مسماة على خاصية DOM البديلة:

<img src="https://i.imgur.com/yXOvdOSs.jpg" alt="هايدي" className="photo" />

يمكنك العثور على كل هذه السمات في قائمة خصائص مكونات DOM. إذا ارتكبت خطأً، لا تقلق — ستقوم React بطباعة رسالة مع تصحيح محتمل إلى وحدة التحكم في المتصفح.

مأزق

لأسباب تاريخية، تكتب السمات aria-* و data-* كما هي في HTML مع شرطات.

نصيحة احترافية: استخدم محول JSX

يمكن أن يكون تحويل كل هذه السمات في العلامات الموجودة مملًا! نوصي باستخدام محوِّل لترجمة HTML و SVG الموجودة إلى JSX. المحولات مفيدة جدًا في التدرّب، لكن من الأفضل فهم ما يجري حتى تتمكن من كتابة JSX بسهولة بمفردك.

هنا هو نتيجتك النهائية:

export default function TodoList() { return ( <> <h1>مهمات هايدي</h1> <img src="https://i.imgur.com/yXOvdOSs.jpg" alt="هايدي" className="photo" /> <ul> <li>اختراع إشارات المرور</li> <li>إعادة تمثيل مشهد من فيلم</li> <li>تحسين بعض التكنولوجيا</li> </ul> </> ); }

خلاصة

الأن تعرف لماذا JSX موجود وكيفية استخدامه في المكونات:

  • تجمع مكونات React المنطق مع البناء معًا لأنهما مرتبطان.
  • JSX مشابه لـ HTML، مع بعض الاختلافات. يمكنك استخدام محول إذا كنت بحاجة إلى ذلك.
  • رسائل الخطأ غالبًا ما تشير إلى الاتجاه الصحيح لإصلاح البناء.

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

تحدي 1 من 1:
حوّل بعض HTML إلى JSX

تم لصق هذا الكود في مكون، لكنه ليس JSX صالح. قم بإصلاحه:

export default function Bio() { return ( <div class="intro"> <h1>مرحبًا بكم في موقعي!</h1> </div> <p class="summary"> يمكنك العثور على أفكاري هنا. <br><br> <b>و <i>صور</i></b> للعلماء! </p> ); }

أيًّا ما تفعل، استخدام محّول أو بيدك، اختر المناسب لك.

السابقاستيراد وتصدير المكونات (Components)
التاليJavaScript في JSX باستخدام الأقواس المنحنية

Copyright © Meta Platforms, Inc
no uwu plz
uwu?
Logo by@sawaratsuki1004
تعلم React
بداية سريعة
التثبيت
وصف واجهة المستخدم (UI)
إضافة التفاعلية
إدارة State
مخارج الطوارئ
مرجع API
React APIs
React DOM APIs
المجتمع
ميثاق السلوك
تعرف على الفريق
المساهمون في التوثيق
شكر وتقدير
المزيد
المدونة
React Native
الخصوصية
الشروط
<h1>مَهمَّات هايدي ليمار</h1>
<img
src="https://i.imgur.com/yXOvdOSs.jpg"
alt="هايدي"
class="photo"
>
<ul>
<li>اختراع إشارات المرور
<li>إعادة تمثيل مشهد من فيلم
<li>تحسين بعض التكنولوجيا
</ul>
export default function TodoList() {
return (
// ???
)
}
Fork
export default function TodoList() {
  return (
    // هذا لا بعمل
    <h1>مَهمَّات هايدي ليمار</h1>
    <img
      src="https://i.imgur.com/yXOvdOSs.jpg"
      alt="هايدي"
      class="photo"
    >
    <ul>
      <li>اختراع إشارات المرور
      <li>إعادة تمثيل مشهد من فيلم
      <li>تحسين بعض التكنولوجيا
    </ul>

<div>
<h1>مَهام هايدي ليمار</h1>
<img
src="https://i.imgur.com/yXOvdOSs.jpg"
alt="هايدي"
class="photo"
>
<ul>
...
</ul>
</div>
<>
<h1>مَهام هايدي ليمار</h1>
<img
src="https://i.imgur.com/yXOvdOSs.jpg"
alt="هايدي"
class="photo"
>
<ul>
...
</ul>
</>
<>
<img
src="https://i.imgur.com/yXOvdOSs.jpg"
alt="هايدي"
class="photo"
/>
<ul>
<li>اختراع إشارات المرور</li>
<li>إعادة تمثيل مشهد من فيلم</li>
<li>تحسين بعض التكنولوجيا</li>
</ul>
</>
<img
src="https://i.imgur.com/yXOvdOSs.jpg"
alt="هايدي"
className="photo"
/>
Fork
export default function TodoList() {
  return (
    <>
      <h1>مهمات هايدي</h1>
      <img 
        src="https://i.imgur.com/yXOvdOSs.jpg" 
        alt="هايدي"
        className="photo"
      />
      <ul>
        <li>اختراع إشارات المرور</li>
        <li>إعادة تمثيل مشهد من فيلم</li>
        <li>تحسين بعض التكنولوجيا</li>
      </ul>
    </>
  );
}

Fork
export default function Bio() {
  return (
    <div class="intro">
      <h1>مرحبًا بكم في موقعي!</h1>
    </div>
    <p class="summary">
      يمكنك العثور على أفكاري هنا.
      <br><br>
      <b>و <i>صور</i></b> للعلماء!
    </p>
  );
}