ما هو JSX ولماذا يجب عليك استخدامه لبناء تطبيقات React الخاصة بك

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

واحدة من هذه التقنيات التي ربما تستخدمها بالفعل هي JSX - امتداد مثل XML لجافا سكريبت . تم إنشاؤه بواسطة فريق Facebook ، ويهدف إلى تبسيط تجربة المطور. كما تقول المواصفات ، كان الأساس المنطقي لإنشاء JSX هو:

"... لتعريف تركيب موجز ومألوف لتعريف هياكل الشجرة بالسمات." ~ مواصفات JSX

الآن ، ربما تقول لنفسك ، "مرحبًا ، ريان ، هذا يبدو رائعًا ، لكن عليك الوصول إلى الشفرة بالفعل " ، لذلك هذا هو المثال الأول.

const helloWorld = 

Hello, World!

;

وهذا كل شيء!

يبدو مقتطف الشفرة أعلاه مألوفًا ، ولكن هل توقفت يومًا عن التفكير في قوته؟ JSX يجعله حتى نتمكن من تمرير الهياكل الشجرية المكونة من عناصر HTML أو React كما لو كانت قيم JavaScript قياسية.

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

الشروع في العمل مع JSX

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

function Hello() { return 

Hello, World!

}

وراء الكواليس ، يتم تحويل كل عنصر يقدمه Helloالمكون إلى React.createElementمكالمة.

في هذه الحالة:

function Hello() { return React.createElement("h1", {}, "Hello, World!")}

وينطبق الشيء نفسه على العناصر المتداخلة. سيقدم المثالان أدناه في النهاية نفس الترميز.

// Example 1: Using JSX syntaxfunction Nav() { return ( 
    
  • Home
  • About
  • Portfolio
  • Contact
);}
// Example 2: Not using JSX syntaxfunction Nav() { return ( React.createElement( "ul", {}, React.createElement("li", null, "Home"), React.createElement("li", null, "About"), React.createElement("li", null, "Portfolio"), React.createElement("li", null, "Contact") ) );}

تفاعل. إنشاء عنصر

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

  1. اسم العنصر
  2. كائن يمثل دعائم العنصر
  3. مجموعة من العناصر الأبناء

شيء واحد يجب ملاحظته هنا هو أن React تفسر العناصر الصغيرة على أنها عناصر HTML و Pascal (مثل ThisIsPascalCase) كمكونات مخصصة. لهذا السبب ، سيتم تفسير الأمثلة التالية بشكل مختلف.

// 1. HTML elementReact.createElement("div", null, "Some content text here")
// 2. React elementReact.createElement(Div, null, "Some content text here")

المثال الأول من شأنه إنشاء ملف iv> with the s tring "Some content text here" as its child. However, the second version would throw an error (unless, of course, a custom comp onent <Div /> was in sco pe) because is undefined.

Props in JSX

When working in React, your components often render children and need to pass them data in order for the children to render properly. These are called props.

I like to think of React components as a group of friends. And what do friends do? They give each other props. Thankfully, JSX offers us a number of ways to do that.

// 1. Props defaulted to true
// 2. String literals
// 3. JavaScript expressions
// 4. Spread attributes

But beware! You cannot pass if statements or for loops as props because they are statements, not expressions.

Children in JSX

As you are building your app, you eventually start having components render children. And then those components sometimes have to render children. And so on and so forth.

Since JSX is meant to make it easy for us to reason about tree-like structures of elements, it makes all of this very easy. Basically, whatever elements a component returns become its children.

There are four ways to render child elements using JSX:

Strings

This is the simplest example of JSX children. In the case below, React creates a <h1> HTML element with one child. The child, however, is not another HTML element, just a simple string.

function AlertBanner() { return ( 

Your bill is due in 2 days

)}

JSX Elements

This is probably the use case that new React developers would be most familiar with. In the component below, we’re returning an HTML child (the er>), which has two children of it s own &lt;Na v /> and &lt;ProfilePic /> both of which are custom defined JSX elements.

function Header(props) { return ( )}

Expressions

Expressions allow us to easily render elements in our UI that are the result of a JavaScript computation. A simple example of this would be basic addition.

Say we have a component called /> that renders information about a bill or receipt. Let’s assume it takes one prop c alled total that represents the pre-tax cost and another prop taxRate, which represents the applicable tax rate.

Using expressions, we can easily render out some useful information for our users!

function BillFooter(props) { return ( 
Tax: {props.total * props.taxRate}
Total: {props.total + props.total * props.taxRate}
);}

Functions

With functions, we can programmatically create elements and structures, which React will then render for us. This makes it easy to create multiple instances of a component or render repeated UI elements.

As an example, let’s use JavaScript’s .map() function to create a navigation bar.

// Array of page informationconst pages = [ { id: 1, text: "Home", link: "/" }, { id: 2, text: "Portfolio", link: "/portfolio" }, { id: 3, text: "Contact", link: "/contact" }];// Renders a 
    
    with programmatically created
  • childrenfunction Nav() { return (
      {pages.map(page => { return (
    • {page.text}
    • ); })}
    );}

Now, if we want to add a new page to our site, all we need to do is add a new object to the pages array and React will take care of the rest!

Take note of the key prop. Our function returns an array of sibling elements, in this case <li>s, and React needs a way to keep track of which mounts, unmounts or updates. To do that, it relies on this unique identifier for each element.

Use the tools!

Sure, you can write React applications without JSX, but I’m not really sure why you’d want to.

The ability JSX gives us to pass around elements in JavaScript like they were first-class citizen lends itself well to working with the rest of the React ecosystem. So well, in fact, you may have been writing it every day and not even known it.

Bottom line: just use JSX. You’ll be happy you did.