v19.2Latest

كتابة الترميز باستخدام JSX

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

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

JSX: وضع الترميز في JavaScript

تم بناء الويب على 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 تشير إلى المكون الموضح في الرسم التخطيطي التالي.

Sidebar.jsمكون React

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

Form.jsمكون React

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

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

ملاحظة

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

تحويل HTML إلى JSX

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

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

إذا قمت بنسخه ولصقه كما هو، فلن يعمل:

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

ملاحظة

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

قواعد JSX

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

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

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

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

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

Deep Dive
لماذا تحتاج الوسوم المتعددة في JSX إلى تغليف؟

2. أغلق جميع الوسوم

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

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

3. استخدم camelCaseلـمعظم الأشياء!

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

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

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

مأزق

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

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

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

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

ملخص

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

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

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

Challenge 1 of 1:حوّل بعض HTML إلى JSX #

تم لصق هذا HTML في مكون، لكنه ليس JSX صالحًا. أصلحه:

سواء قمت بذلك يدويًا أو باستخدام أداة التحويل، فهذا يعود إليك!