جستجو برای:
سبد خرید 0
  • صفحه اصلی
  • دوره های آموزشی
    • آموزش کتابخانه Ant Design به سادگی آب خوردن !
    • آموزش ساخت داشبورد حرفه ای با ری اکت !
    • آموزش فریمورک Tailwind CSS به زبان ساده!
    • آموزش HTML و CSS پروژه محور و اصولی !
  • وبلاگ
  • تماس با ما
  • درباره ما
logo-frontendi-150
0
  • خانه
  • دوره ها
  • وبلاگ فِرانت اِندی
  • تماس با ما
ورود / عضویت
  • صفحه اصلی
  • دوره های آموزشی
    • آموزش کتابخانه Ant Design به سادگی آب خوردن !
    • آموزش ساخت داشبورد حرفه ای با ری اکت !
    • آموزش فریمورک Tailwind CSS به زبان ساده!
    • آموزش HTML و CSS پروژه محور و اصولی !
  • وبلاگ
  • تماس با ما
  • درباره ما
ورود / عضویت

وبلاگ

فرانت اندی > وبلاگ فِرانت اِندی > ری اکت > بررسی JSX در ری اکت ! مزیت JSX در ری اکت چیست ؟

بررسی JSX در ری اکت ! مزیت JSX در ری اکت چیست ؟

16 شهریور 1402
ارسال شده توسط احمد احمدنژاد
ری اکت
بررسی و آموزش JSX در ری اکت و JSX در React ! تو این مقاله میخوایم ببینیم که اصلا JSX چیست ؟ مزیت JSX چیه و فرمت .jsx چیست ؟

JSX در ری اکت یک افزونه جاوااسکریپتی هست که به ما اجازه نوشتن کد های مشابه HTML رو در جاوااسکریپت میده! در واقع JSX به ما اجازه میده که تو فایل های جاوااسکریپتی مثل ری اکت، از HTML استفاده کنیم 🙂 این تعریفی که از JSX در React داشتیم خیلی مختصر و ساده بود!

با فِرانت اِندی همراه باشید که میخوایم بصورت تخصصی JSX در ری اکت رو بررسی کنیم 🙂

 

JSX چیست ؟

JSX یکی از اصلی ترین مفاهم ری اکت هست.

JSX یک افزونه جاوااسکریپتی هست که تو ری اکت ازش استفاده میشه. JSX به ما اجازه نوشتن کد های HTML رو داخل جاوااسکریپت رو میده.

عبارت JSX مخفف JavaScript Syntax extention هست.

بصورت پیشفرض ما نمیتونیم کد های HTML ( تگ های HTML ) رو داخل فایل های جاوااسکریپتی بنویسیم! از اونجاییکه تو ری اکت از جاوااسکریپت استفاده میشه، پس اینجا هم نمیونیم از HTML استفاده کنیم.

اما راه حل چیه ؟ ( که بتونیم کد های HTML رو مستقیما داخل JavaScript بنویسیم )

راه حل JSX هست 🙂 به کمک JSX میشه از دستورات HMTL داخل فایل های React استفاده کرد..

تو تیکه کد زیر که یک JSX هست، ما یک اِلِمان P ( مشابه P در HTML ) ساختیم و نتیجه رو داخل یک متغیر ذخیره کردیم :

				
					const frontEndi = <p>سلام</p>
				
			
آموزش props در ری اکت - props در ری اکت - props در react - ویژگی props چیست ؟

چطور تو ری اکت JSX بنویسیم ؟

مرورگر ها هیچ درک و فهمی از JSX ندارن، پس اگه از JSX استفاده کنید مرورگر ها JSX رو متوجه نمیشن!

برای رفع این مشکل باید JSX رو به کمک Babel ( کامپایر جاوااسکریپتی ) به جاوااسکریپت تبدیل کنیم که مرورگر ها بتونن درکش کنن.

اگه از کتابخانه ری اکت استفاده میکنین، ری اکت خودش از Babel استفاده میکنه و کدهای JSX شمارو به JavaScript تبدیل میکنه. پس نگران این موضوع نباشید 🙂

تو تیکه کد زیر ما یک کامپوننت در ری اکت ساختیم که یک اِلِمان h1 به ما نشون میده :

				
					const App = () => { 
return (
    <h1>سلام من یه تگ جی اس ایکس هستم</h1>
)
}
				
			

زمانیکه Babel ( کامپایلر جاوااسکریپتی ) به تیکه کد بالا برمیخوره، تیکه کد بالا رو به تیکه کد پایینی تبدیل میکنه :

				
					const App = () => { 
return (
   React.createElement("h1",null,"سلام من یه تگ جی اس ایکس هستم")
)
}
				
			

تبدیل JSX به جاوااسکریپت در پشت صحنه اتفاق میوفته و ما متوجه این موضوع نمیشیم.

درواقع Babel عمل تبدیل JSX به JS رو به این دلیل انجام میده که مرورگر بتونه کد JSX مارو متوجه بشه و در صفحه نمایش بده.

چرا JSX خوبه ؟

  • چون نیازی نیست UI و Logic رو از هم جدا کنیم و فایل های جدا از هم براشون در نظر بگیریم ( مثلا یک فایل html و یک فایل js ) به کمک JSX میشه Logic و Ui رو در کنار همدیگه نوشت.

  • نوشتن JSX نسبت به جاوااسکریپت خیلی راحت تره!

  • JSX نسبت به جاوااسکریپت خام بهینه تره. چون زمان کامپایل شدن JSX، بهینه سازی هایی روش صورت میگیره.

آموزش props در ری اکت - props در ری اکت - props در react - ویژگی props چیست ؟

تابع React.createElement چیست ؟

هر تیکه کدی که تو JSX در ری اکت مینویسیم، به کمک تابع React.createElement به جاوااسکریپت تبدیل میشه تا مرورگر ها بتونن درکش کنن.

تابع React.createElement همونطور که از اسمش پیداست، یک اِلِمان JSX برای ما میسازه.

منظور از اِلِمان JSX ، همون تگ هایی هست که در HTML استفاده میکردیم ( مثل h1,p,span,input,button,b و .. )

ساختار کلی تابع React.createElement بصورت زیر هست :

				
					React.createElement(type, [props], [...children])
				
			

اگه به تیکه کد بالا نگاهی بندازید، میبینید که تابع createElement خودش چندتا ورودی از ما دریافت میکنه :

  • آرگومان اول createElement :

آرگومان اول type ( نوع ) اِلِمانی هست که میخواید بسازید . این type میتونه  یک اِلِمان HTML باشه مثل P یا input و ..

  • آرگومان دوم createElement :

مقدار دوم خصوصیت هایی هست که میخواید به اون Element بدید. این همون attribute هایی هست که به تگ های HTML میدادیم مثل placeHolder و ..

  • آرگومان سوم createElement :

ما میتونیم به اِلِمانی که میخوایم بسازیم، فرزند ( Children ) بدیم. این Children میتونه یک اِلِمان یا کامپوننت دیگه باشه.

تیکه کد زیر که یک JSX هست رو در نظر بگیرید :

				
					  React.createElement("h1",null,"سلام من یه تگ جی اس ایکس هستم")
				
			

خروجی تیکه کد بالا، Object زیر هست :

				
					{   
 type: 'h1',   
 props: {     
   children: 'سلام من یه تگ جی اس ایکس هستم'   
 }
}

				
			

برای اینکه ببینیم یک Element در JSX دقیقا چیه ، کافیه از اون اِلِمان log بگیریم :

				
					const myJsxTag = <h2>سلام</h2>;
console.log(myJsxTag)
				
			

چطور تو کامپوننت خودمون یک اِلِمان JSX بسازیم ؟

برای اینکه تو کامپوننت خودمون در React از اِلِمان های JSX استفاده کنیم، خیلی راحت میتونیم بصورت زیر عمل کنیم :

				
					const App = () => { 
return (
    <h1>سلام من یه تگ جی اس ایکس هستم</h1>
)
}
				
			

تو خط 3 تیکه کد بالا از یک اِلِمان JSX استفاده کردیم.

حالا اگه بخوایم از دو یا چند اِلِمان JSX استفاده کنیم، باید بصورت زیر عمل کنیم:

				
					const App = () => { 
return (
    <h1>سلام من یه تگ جی اس ایکس هستم</h1>
     <h1>سلام من یه تگ جی اس ایکس هستم</h1>
)
}
				
			

اما با اجرای کد بالا ( که 2 اِلِمان JSX نمایش دادیم ) ارور زیر بهمون نمایش داده میشه :

ارور JSX expressions must have one parent element  در jSX

دلیل ارور JSX expressions must have one parent element در خود متن ارور مشخصه! ما باید برای Element های JSX خودمون والد داشته باشیم.
به عبارت ساده اِلِمان های JSX حتما باید یک اِلِمان والد ( یک div ، Span یا .. ) داشته باشن.
همچنین برای رفع این مشکل میتونید از Fragment در ری اکت استفاده کنید. ( اگه با Fragment آشنا نیستید پیشنهاد میکنم مقاله مربوط به این قابلیت رو مطالعه کنید)
برای رفع ارور تیکه کد بالا ( که 2 اِلِمان JSX داشتیم ) میتونیم از یک div به عنوان والد استفاده کنیم :
 
				
					const App = () => { 
return (
    <div>
        <h1>سلام من یه تگ جی اس ایکس هستم</h1>
        <h1>سلام من یه تگ جی اس ایکس هستم</h1>
     </div>
)
}
				
			

تو تیکه کد بالا از یک div به عنوان والد هر دو اِلِمان h1 استفاده کردیم و ارور ما برطرف شده است.

 

رفع ارور JSX expressions must have one parent element با Fragmet به کمک تگ div یا span میشه این ارور رو رفع کرد، اما این تگ ها باعث افزایش پیچیدگی کد و حتی بهم خوردن استایل های css مخصوصا زمانی که از flexBox استفاده میکنید، میشن. پیشنهاد ما استفاده از Fragment هست که یکی از قابلیت های خود ری اکت برای رفع این مشکل هست.با کلیک روی لینکی که کمی بالاتر براتون گذاشتیم، میتونید راجب Fragment بیشتر بخونید.

چطور کد JSX خودمون رو کامنت کنیم ؟!

کد JSX زیر رو در نظر بگیرید :

 

				
					<h1>سلام من یه تگ جی اس ایکس هستم</h1>

				
			

برای کامنت کردن این تیکه کد JSX ، کافیه از کد JSX خودمون رو داخل  {/*  code  */} بزاریم:

				
					{/*<h1>سلام من یه تگ جی اس ایکس هستم</h1>*/}
				
			

یا برای سریعتر شدن روند کامنت کردن JSX ، اون تیکه کد که قصد کامنت کردنش رو دارید انتخاب کنید و  / + Cmd در مک یا  / + Ctrl در ویندوز رو همزمان فشار بدید.

چطور داخل JSX جاوا اسکریپت بنویسیم ؟

ما میتونیم داخل JSX ، کد های جاوا اسکریپتی بنویسیم. بطور مثال میتونیم متغیر های جاوااسکریپتی خودمون رو داخل JSX استفاده کنیم.

مثل :

				
					const App = () => {
 const Age = 23;
 return (
  <div>
   <p>سن شما: {Age}</p>
  </div>
 );
};
				
			

تو خط 5 ما از یک متغیر جاوااسکریپتی داخل JSX خودمون استفاده کردیم. فقط کافیه متغیر خودمون رو داخل { } بزاریم.

شما میتونید داخل { } هر چیز جاوا اسکریپتی بنویسید و نشون بدید. مثل :

  • یک متغیر مثل myValue

ما میتونیم از متغیر های جاوااسکریپتی داخل JSX خودمون استفاده کنیم.

  • یک آرایه مثل [1,2]

ما میتونیم آرایه خودمون رو داخل JSX نشون بدیم، روش map بزنیم یا ..

  • یک مقدار از یک Object مثل Object.name

ما میتونیم به مقادیر یک Object از داخل JSX دسترسی داشته باشیم یا اون مقدار رو نشون بدیم.

  • و ..

اما برخی کار ها رو نمیشه داخل JSX انجام داد. کار هایی مثل :

  • استفاده از یک loop

ما نمیتونیم از حلقه loop داخل JSX استفاده کنیم!

  • ساخت یک متغیر ( Variable Declaration )

ما نمیتونیم یک متغیر داخل JSX ایجاد کنیم. مثل const x = 1

  • ساخت یک تایع ( Function Declaration )

ما نمیتونیم یک تابع داخل JSX بسازیم. صرفا میتونیم تابع رو فراخوانی کنیم.

  • نوشتن یک شرط با if

امکان نوشتن شرط با if داخل JSX نداریم.

  • فراخوانی یا نمایش یک Object

ما نمیتونیم خود Object رو داخل JSX نمایش بدیم. اما به اعضاش میتونیم دسترسی داشته باشیم.

آموزش props در ری اکت - props در ری اکت - props در react - ویژگی props چیست ؟

نوشتن شرط در JSX ( جایگزین if )

گفتیم که تو JSX نمیشه از شرط هایی که با if نوشته میشن، استفاده کرد.

اما خب ما نیاز داریم که توی JSX شرط هایی رو بررسی کنیم و با توجه به اون شرط یک خروجی رو به کاربر نشون بدیم.

فرض کنید تو JSX ما میخوایم یک مقدار Boolean رو بررسی کنیم که اگر true بود به کاربر مقدار سلام رو نشون بدیم و درصورتیکه آن مقدار false بود مقدار خداحافظ رو نشون بدیم. برای انجام اینکار باید کد زیر رو داخل JSX بنویسیم :

				
					<p>{myBool ? 'خداحافظ' : 'سلام'}</p>
// اگه شرط درست باشه سلام نشون داده میشه . در غیر این صورت خداحافظ نشون داده میشه
				
			

تیکه کد بالا معادل if و else جاوا اسکریپت در JSX هست.

اگه نیازی به else نداریم، میتونیم بصورت زیر شرط خودمون رو بنویسیم :

				
					<p>{myBool && 'سلام'}</p>

				
			

تو مثال های بالا ما یک String به کاربر نشون دادیم، اما شما میتونید یک اِلِمان یا یک کامپوننت به کاربر نشون بدید. یعنی یک شرط رو بررسی میکنید و باتوجه به اون شرط به کاربر خروجی دلخواه رو نشون میدید.

 

چطور به اِلِمان های JSX کلاس ( class ) بدیم ؟

اگه با HTML کار کرده باشید، میدونید که میشه به اِلِمان ها خصوصیت class داد تا بعدا بتونیم به این اِلِمان از طریق css استایل بدیم.

تو JSX بجای عبارت class باید عبارت className رو بنویسیم.

یعنی :

تو JSX اینجوری class میدیم:

				
					<p className="x">JSX</p>
				
			

تو HTML اینجوری class میدیم:

				
					<p class="x">HTML</p>
				
			
چرا باید از className بجای class در JSX استفاده کنیم ؟ به این دلیل که کلمه class در جاوااسکریپت یک مقدار رزرو شده هست، ما نمیتونیم از مقدار class استفاده کنیم. راه حل استفاده از عبارت className هست.

ضمن اینکه در React ، تمامی Attribute ها بصورت camelCase نوشته میشن. ( مثل className )

برخی Element های HTML تگ بسته شدن ندارن( مثل <hr> ). اگه از این تگ ها بخوایم تو JSX استفاده کنیم باید تگ بسته شدن براشون بزاریم ( مثل </ hr> )

جمع بندی

ما تو این مقاله در مورد JSX صحبت کردیم که به عنوان یک React Developer لازم هست که درک درستی ازش داشته باشیم.

اِلِمان ها/تگ هایی که تو JSX میسازیم در پشت صحنه به کمک تابع React.createElement تبدیل به یک آبجکت جاوا اسکریپتی میشن تا جاوا اسکریپت امکان خوندنشون رو داشته باشه.

ما میتونیم تو JSX از کد ها/متغیر های جاوا اسکریپتی استفاده کنیم ( به کمک {} )

ما تو ری اکت نمیتونیم از عبارت class برای دادن کلاس به اِلِمان ها استفاده کنیم چون عبارت class یک مقدار رزرو شده هست. راه حل استفاده از عبارت className هست.

تمامی خصوصیت ها / Attribute ها در ری اکت بصورت camelCase نوشته میشن ( مثل myName )

JSX چیست ؟

JSX یک افزونه جاوااسکریپتی هست که تو ری اکت ازش استفاده میشه. JSX به ما اجازه نوشتن کد های HTML رو داخل جاوااسکریپت رو میده.

مزیت JSX چیه ؟
  • نیازی نیست UI و Logic رو از هم جدا کنیم و فایل های جدا از هم براشون در نظر بگیریم ( مثلا یک فایل html و یک فایل js ) به کمک JSX میشه Logic و Ui رو در کنار همدیگه نوشت.

  • نوشتن JSX نسبت به جاوااسکریپت خیلی راحت تره!

  • JSX نسبت به جاوااسکریپت خام بهینه تره. چون زمان کامپایل شدن JSX، بهینه سازی هایی روش صورت میگیره.

JSX مخفف چیه ؟

عبارت JSX مخفف JavaScript Syntax extention هست.

سوالات متداول فِرانت اِندی
درباره احمد احمدنژاد

من یه برنامه نویس و توسعه دهنده وب هستم که عاشق دنیای صفر و یکم❤️

نوشته‌های بیشتر از احمد احمدنژاد
قبلی Props در ری اکت چیست و چطور باید از Props استفاده کنیم ؟
بعدی بررسی Suspense در ری اکت ! Suspense در React چیست ؟

32 دیدگاه

به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.

  • محمد ابراهیم پور گفت:
    24 شهریور 1402 در 22:22

    مقاله واقعا عالی و کامل بود. دمتون گرم

    پاسخ
    • احمد احمدنژاد گفت:
      26 شهریور 1402 در 11:16

      سلام و درود
      ممنونم از نظرتون و خوشحالم که براتون مفید واقع شده.

      پاسخ
  • حسین گفت:
    28 شهریور 1402 در 15:04

    JSX در ری اکت فقط کاربرد داره یا در سایر کتابخانه ها هم میشه ازش استفاده کرد؟

    پاسخ
    • احمد احمدنژاد گفت:
      1 مهر 1402 در 04:22

      سلام و درود
      JSX در React کاربرد داره و در سایر کتابخونه ها کاربرد نداره. در برخی کتابخانه ها و فریمورک ها معادلی برای JSX وجود داره.

      پاسخ
  • sahel گفت:
    30 شهریور 1402 در 17:04

    چطور باید JSX در ری اکت رو نصب کنیم ؟

    پاسخ
    • احمد احمدنژاد گفت:
      1 مهر 1402 در 04:21

      سلام و درود
      JSX در ری اکت بصورت پیشفرض قابل استفادس و نیازی به نصب کردن یا تنظیم خاصی ندارید . درواقع چون ری اکت از Babel استفاده میکنه، خود Babel کد های JSX شمارو به جاوااسکریپت تبدیل میکنه.

      پاسخ
  • mahtab گفت:
    3 مهر 1402 در 20:08

    سلام ممنون از توضیحاتتون
    لطفا در مورد next.js هم مقاله آموزشی قرار بدید

    پاسخ
    • احمد احمدنژاد گفت:
      4 مهر 1402 در 03:00

      سلام و درود
      خوشحالم که براتون مفید واقع شده.
      حتماا ..

      پاسخ
  • Fatemeh گفت:
    5 مهر 1402 در 19:52

    سلام وقت بخیر . تو مصاحبه ای که داشتم ازم پرسیدن چرا تو JSX بجای class از className استفاده میکنیم ؟
    من نمیدونم دلیلش چیه .. ممنون میشم توضیح بدین

    پاسخ
    • احمد احمدنژاد گفت:
      6 مهر 1402 در 05:54

      سلام و درود
      همونطور که تو مقاله مطرح شده، JSX یک افزونه جاوااسکریپتی هست.
      عبارت class یک کلمه کلیدی رزرو شده تو جاوا اسکریپت هست! پس نمیتونیم ازش استفاده کنیم .
      اگه از class بجای className استفاده کنیم، به conflict برمیخوریم!
      درواقع استفاده از className بجای class تنها راهیه که بتونیم به اِلِمان های JSX خودمون، کلاس بدیم.

      پاسخ
  • mohammad گفت:
    6 مهر 1402 در 02:59

    عالی بود مرسی

    پاسخ
    • احمد احمدنژاد گفت:
      6 مهر 1402 در 05:54

      سلام و درود
      خوشحالم که برات مفید واقع شده 🙂
      موفق باشی

      پاسخ
  • Mohsen گفت:
    7 مهر 1402 در 10:31

    kheyli khoob bood tashakor

    پاسخ
    • احمد احمدنژاد گفت:
      8 مهر 1402 در 07:21

      سلام و درود
      خوشحالم که براتون مفید واقع شده 🙂

      پاسخ
  • sahar گفت:
    10 مهر 1402 در 19:28

    توضیحاتتون عاااالی بود

    پاسخ
    • احمد احمدنژاد گفت:
      11 مهر 1402 در 11:16

      سلام و درود
      ممنونم لطف دارین 🙂
      موفق باشید

      پاسخ
  • Alireza گفت:
    17 آبان 1402 در 17:02

    برای استفاده از JSX ری اکت باید چیزی نصب کنیم ؟

    پاسخ
    • احمد احمدنژاد گفت:
      17 آبان 1402 در 17:15

      سلام و درود
      خیر بزرگوار با نصب کتابخانه ری اکت، میتونید از JSX ری اکت استفاده کنید.
      نیاز به نصب چیز اضافه ای نیست.
      موفق باشید

      پاسخ
  • Sara گفت:
    3 آذر 1402 در 16:43

    مرسی از اینکه انقدر به زبون ساده مباحث فرانت اند رو توضیح میدید

    پاسخ
    • احمد احمدنژاد گفت:
      4 آذر 1402 در 17:32

      سلام و درود
      خواهش میکنم بزرگوار 🙂
      خوشحالم که براتون مفید واقع شده

      پاسخ
  • reza گفت:
    4 آذر 1402 در 19:09

    عالی بود ممنون

    پاسخ
    • احمد احمدنژاد گفت:
      4 آذر 1402 در 22:24

      سلام و درود
      خوشحالم که برات مفید واقع شده 🙂

      پاسخ
  • محسن رضایی گفت:
    5 آذر 1402 در 00:05

    خیلی کاربردی بوود ممنون

    پاسخ
    • احمد احمدنژاد گفت:
      9 آذر 1402 در 02:03

      سلام و درود
      خوشحالم که براتون مفید واقع شده 🙂

      پاسخ
  • سهیل گفت:
    12 آذر 1402 در 22:02

    مقاله فوق العاده مفید و کاربردی بود تشکر

    پاسخ
    • احمد احمدنژاد گفت:
      15 آذر 1402 در 10:36

      سلام خوشحالم که براتون مفید واقع شده 🙂

      پاسخ
  • morteza گفت:
    14 آذر 1402 در 16:38

    توضیحاتتون درمورد JSX ری اکت عالی بود ممنون

    پاسخ
    • احمد احمدنژاد گفت:
      15 آذر 1402 در 10:36

      سلام و درود
      خواهش میکنم بزرگوار
      موفق باشید 🙂

      پاسخ
  • مصطفی ضیایی گفت:
    5 دی 1402 در 17:28

    محتوا فوق العاده بوود

    پاسخ
    • احمد احمدنژاد گفت:
      7 دی 1402 در 15:14

      سلام ممنونم از توجهت 🙂

      پاسخ
  • منصوره گفت:
    14 اسفند 1403 در 22:07

    توضیح مفاهیم ری اکت بسیار ساده و قابل فهم بود.
    سپاس از،شما
    خیلی به من کمک کرد
    موفق باشید

    پاسخ
    • احمد احمدنژاد گفت:
      16 اسفند 1403 در 04:07

      سلام منصوره عزیز، خیلی خیلی خوشحالم که این مقاله برات مفید واقع شده 🙂
      موفق باشی

      پاسخ

دیدگاهتان را بنویسید لغو پاسخ

جستجو برای:
پیاده سازی و مشاوره فِرانت اِند!

پیاده سازی اصولی و بهینه پروژه های فِرانت اِند در کمترین زمان ممکن 🙂

پیاده سازی و مشاوره

صفحات فِرانت اِندی
  • وبلاگ
  • تماس با ما
  • درباره ما
تماس با ما
  • [email protected]
  • 09102944692
شبکه های اجتماعی
Youtube Instagram Telegram
اشتراک گذاری در شبکه های اجتماعی
ارسال به ایمیل
https://frontendi.com/?p=10465
مرورگر شما از HTML5 پشتیبانی نمی کند.