mohsen akbari
mohsen akbari
خواندن ۴ دقیقه·۴ سال پیش

نکات ریز در مورد سینتکس jsx

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

قرار نیست هرچی که میگم درست باشه، میگن که تالس وقتی درس دادنش تموم می شده به شاگرداش می گفته : خب این تمام فهمیده های من بود، حالا شما برید بهترش کنید و حرف منم همینه



jsx

سینتکس jsx در واقع نه جاوا اسکریپت هست نه html بلکه یه چیزی بینشون هست و همونطور که از اسمشون معلومه javascript و xml هست و این سینتکس کاملا قدرت گرفته از جاوا اسکریپت.
اگر این سینتکس نبود ما باید این صورت در ری اکت کد می زدیم

function hello() {
return /*#__PURE__*/React.createElement(&quotdiv&quot, null, &quotHello world!&quot);
}


این یک hello world ساده هست
حالا کدی که ما داخل ری اکت می نویسم در واقع به این شکل هست به لطف یک کامپایلری به نام babeljs

function hello() {
return <div>Hello world!</div>;
}

پس ری اکت بدون این سینتکس سخت و غیرقابل فهم تر می شد و ما به کمک این سینتکس قابل فهم ،می تونیم چیزی شبیه به html بنویسم داخل یک فایل جاوا اسکریپتی.

نکاتی در مورد jsx:

  • زمانی که می خواهید jsx بزنید باید حتما کتاب خانه react رو ایمپورت کرده باشید ولی دلیل این کار لازم، چی هست؟
    در بالا گفتم که اگه بخواید داخل ری اکت کد بزنید دو راه دارید یا از jsx برای نمایش ui استفاده کنید یا بدون jsx این کد رو بنویسید که حالا می خوام روش دوم رو تشریح کنم.
    ما وقتی jsx می نویسم در واقع یک کامپایلری وجود داره به نام babel که این کامپایلر جذاب میاد jsx ما رو تبدیل میکنه به ابجکت های جاوا اسکریپتی با استفاده از متدReact.createElement
    این متد خفن و کاربردی در واقع 3 تا ارگومان داره.
React.createElement(component, props, ...children)

اولین متد component هست
ما دو نوع کامپوننت داخل ری اکت داریم: اولی کامپوننت های داخلی هستن مثل div،span که همون تگ های html هستن و در واقع ویژگی مشترک همه این کامپوننت های داخلی این هست که با حرف کوچک شروع می شوند.

نوع دوم کامپپوننت ها user-define هست که توسط کاربر تعریف میشه و با حرف بزرگ باید شروع بشوند
اینا همون کامپوننت هایی هستن که ما تعریف می کنیم

متد دوم props هست که میشه تشبیهش کرد به attribute های تگ های html و شامل کلاس و آی دی و استایل و ....

متد سوم هم children هست که تکست هایی که می نویسم داخلش هست.

یه حمع بندی کلی بکنم :

  • تمام jsx که ما می نویسم در نهایت توسط کامپایلر babeljs تبدیل میشن به آبجکت های جاوا اسکریپتی با استفاده از متد React.createElement
  • ما باید از این سینتکس استفاده کنیم چرا که سرعت و خوانایی کدمون بالامیره و لازمه ی استفاده از این سینتکس فراخوانی react هست چرا که قراره موقع کامپایل کد ما متد React.createElement فراخوانی بشه پس همانطور که مشخص هست یک پکیجی از این کتاب خانه هست و باید react باشه در غیر این صورت با ارور مواجه خواهید شد.
  • تمام کامپوننت هایی ک ما قراره تعریف کنیم(نوع دوم) باید با حروف بزرگ نوشته بشن چرا که کامپوننت های built in یا داخلی ری اکت همه شون با حروف کوچک نوشته شدن و برای اینکه قاطی نشه این قانون وجود داره.
  • برای نوشتن کد های جاوا اسکریپیتی داخل این سینتکس حتما باید { } استفاده بکنید وگرنه با ارور مواجه می شوید.


reactjsxbabeljs
شاید از این پست‌ها خوشتان بیاید