JSX: JavaScript kengaytmasi va foydalanish misollari

Muallif: IT Sectr Nashr etilgan: 2026-07-03 O'qish vaqti: 10 daq

JSX — bu foydalanuvchi interfeyslarini deklarativ tavsiflash uchun React jamoasi tomonidan ishlab chiqilgan XML-ga o'xshash JavaScript sintaksis kengaytmasi. Shablon dvigatellaridan farqli o'laroq, JSX oddiy JavaScript funksiya chaqiruvlariga kompilyatsiya qilinadi, bu belgilash ichida tilning to'liq quvvatini beradi. React, 2024 ma'lumotlariga ko'ra, JSX barcha zamonaviy React freymvorklari va kutubxonalarida qo'llab-quvvatlanadi.

Asosiy fikrlar

  • JSX — React.createElement ustidagi sintaktik shakar, JavaScript-da HTML-ga o'xshash belgilash yozish imkonini beradi.
  • Ifodalar JSX-da jingalak qavslar orqali kiritiladi — har qanday JS ifodalaridan foydalanish mumkin.
  • Atributlar JSX-da camelCase da yoziladi (className, onClick, tabIndex), kebab-case da emas.
  • Transpilatsiya JSX dan JS ga Babel, TypeScript yoki esbuild tomonidan brauzerda bajarilishidan oldin amalga oshiriladi.
  • XSS himoyasi o'rnatilgan — React render qilishdan oldin barcha qiymatlarni escap qiladi, inyeksiyalarning oldini oladi.

JSX nima?

JSX (JavaScript XML) — bu JavaScript uchun sintaksis kengaytmasi bo'lib, birinchi marta 2013 yilda React da taqdim etilgan. Bu dasturchilarga foydalanuvchi interfeysining tuzilishini deklarativ uslubda tasvirlash, belgilash va mantiqni bitta faylda birlashtirish imkonini beradi.

JSX paydo bo'lishidan oldin, dasturchilar matn shablonlaridan (Mustache, Handlebars) foydalanganlar yoki DOM elementlarini qo'lda document.createElement orqali yaratganlar. Ikkala yondashuvning ham kamchiliklari bor edi: matn shablonlari turlar bo'yicha tekshirilmagan, qo'lda DOM yaratish esa og'ir va xatolarga moyil edi.

React boshqa yo'lni tanladi — belgilashni to'g'ridan-to'g'ri kodga joylashtirish. Bu qaror jamiyatda bahslarga sabab bo'ldi, ammo vaqt o'tishi bilan standartga aylandi. Bugungi kunda JSX nafaqat React da, balki SolidJS, Preact, Qwik va hatto Vue da plaginlar orqali qo'llaniladi.

JSX ning asosiy sintaksisi

JSX elementi HTML tegiga o'xshaydi, lekin to'g'ridan-to'g'ri JavaScript ga joylashtiriladi. Har bir element uchta argument bilan React.createElement chaqiruviga transpilatsiya qilinadi: element turi, props obyekti va bola elementlar. Bitta ildiz elementi — majburiy qoida: JSX ifodasi bitta ota-ona elementi yoki fragmentni qaytarishi kerak.

js
import React from 'react';

// Asosiy JSX - bitta ildiz elementi
const element = (
  <div className="app">
    <h1>Hello, World!</h1>
    <p>Welcome to React</p>
  </div>
);

Guruhlash uchun fragmentlar

Qo'shimcha DOM tuguni kerak bo'lmaganda, React.Fragment yoki qisqa sintaksisdan <></> foydalaning. Fragmentlar haqiqiy DOM elementini yaratmaydi, faqat bola tugunlarini guruhlaydi. Bu, ayniqsa, jadvallar va ro'yxatlarda foydali, bu erda qo'shimcha o'rash HTML strukturasini buzishi mumkin.

js
function Columns() {
  return (
    <>
      <td>First</td>
      <td>Second</td>
    </>
  );
}

JSX dagi ifodalar va o'zgaruvchilar

Har qanday JavaScript ifodasi JSX ga jingalak qavslar orqali kiritiladi { }. Ichkarida o'zgaruvchilar, funksiya chaqiruvlari, uchlik operatorlar va massiv metodlaridan foydalanish mumkin. Shartli render uchlik operator yoki mantiqiy AND orqali amalga oshiriladi.

js
function Greeting({ name, isLoggedIn }) {
  const items = ['Red', 'Green', 'Blue'];

  return (
    <div>
      {/* Expression with variable */}
      <h1>Hello, {name}</h1>

      {/* Conditional rendering */}
      {isLoggedIn ?
        <p>Welcome back!</p :
        <button>Login</button>
      }

      {/* Render array */}
      <ul>
        {items.map(item =>
          <li key={item}>{item}</li>
        )}
      </ul>
    </div>
  );
}

Asosiy cheklov — jingalak qavslar ichida faqat ifodalardan foydalanish mumkin, ko'rsatmalardan emas. if/else, for, switch ishlatib bo'lmaydi — faqat uchlik operator, mantiqiy operatorlar va massiv metodlari. Funksiya chaqiruvlari, jumladan o'q funksiyalari, ruxsat etilgan.

JSX va HTML o'rtasidagi farqlar

JSX vizual ravishda HTML ga o'xshaydi, lekin tubdan farqlarga ega. Atributlar camelCase da yoziladi — className class o'rniga, onClick onclick o'rniga, tabIndex tabindex o'rniga. Bu JSX ning JavaScript ga transpilatsiya qilinishi bilan bog'liq, bu erda xususiyat nomida defisga ruxsat berilmaydi.

HTMLJSXSabab
class="wrapper"className="wrapper"class — JS da himoyalangan so'z
onclick="handle()"onClick={handle}JS xususiyatlari uchun camelCase
style="color: red"style={{ color: 'red' }}Matn o'rniga stillar obyekti
<input disabled><input disabled={true}>Boolean atributlarning aniq ko'rsatilishi

Yana bir muhim farq — o'z-o'zidan yopiluvchi teglar. HTML da ba'zi teglar (br, hr, input) yopilmasligi mumkin. JSX da barcha o'z-o'zidan yopiluvchi teglar yopiluvchi qiyshiq chiziqqa ega bo'lishi kerak: <br />, <input />. SVG atribut nomlari ham camelCase ga o'zgartiriladi: strokeWidth, fillOpacity.

JSX JavaScript ga qanday transpilatsiya qilinadi

Brauzerlar JSX ni to'g'ridan-to'g'ri tushunmaydi. Bajarilishdan oldin, JSX kodi transpilatordan — Babel, TypeScript yoki esbuild dan o'tadi. Har bir JSX elementi createElement yoki jsx/runtime chaqiruviga aylantiriladi.

Babel orqali transformatsiya

js
// Asl JSX
const element = <h1 className="title">Hello</h1>;

// Transpilatsiyadan keyin
const element = React.createElement(
  'h1',
  { className: 'title' },
  'Hello'
);

React 17 dan boshlab, React importini talab qilmaydigan yangi JSX transformatsiyasi paydo bo'ldi. Avtomatik import jsx-runtime import React from 'react' holda komponentlar yozish imkonini beradi. Babel va TypeScript bu transformatsiyani {"runtime": "automatic"} sozlamasi orqali qo'llab-quvvatlaydi.

JSX React dan tashqari: Solid, Preact, Vue

JSX React bilan bog'liq bo'lsa-da, boshqa freymvorklar ham undan foydalanadi. SolidJS JSX ni Virtual DOMsiz haqiqiy DOM tugunlariga kompilyatsiya bilan ishlatadi. Preact — JSX ni to'liq qo'llab-quvvatlagan holda React ga engil alternativ. Vue @vue/babel-plugin-jsx orqali JSX ni qo'llab-quvvatlaydi, garchi uning asosiy shabloni template bo'lsa ham.

Asosiy farq — ifodalar semantikasi. React da JSX ifodalari har bir renderda bajariladi. SolidJS da JSX bir marta kompilyatsiya qilinadi va yangilanishlar signallar orqali kuzatiladi. Bu ishlashga ta'sir qiladi: SolidJS Virtual DOM va rekonsiliatsiyani talab qilmaydi, shuning uchun JSX renderi tezroq.

TypeScript da JSX til darajasida qo'llab-quvvatlanadi. .tsx kengaytmasi bo'lgan fayllar avtomatik ravishda JSX sintaksisini qayta ishlaydi. Propslarni tiplashtirish — TypeScript + JSX ning asosiy afzalliklaridan biri: IDE kutilayotgan atributlarni, callback turlarini va propslarning majburiyligini ko'rsatadi.

JSX bilan ishlashning eng yaxshi amaliyotlari

O'qish va saqlash oson bo'lgan JSX kodini yozing. Murakkab ifodalarni alohida o'zgaruvchilar yoki funksiyalarga ajrating — bu o'qishni yaxshilaydi va mantiqni belgilashdan alohida test qilish imkonini beradi. Keraksiz div o'rashlari o'rniga fragmentlardan foydalaning.

Xat boshi qoidasi — ichki elementlar uchun xat boshilariga rioya qiling. Har bir ichki daraja — bir xat boshi darajasi. Yopiluvchi teg ochiluvchi teg darajasida bo'lishi kerak. Uzun atributlar uchun qator uzilishidan foydalaning.

Propslarda inline o'q funksiyalaridan saqlaning, agar ular har bir renderda yaratilsa. Bunday hollarda callback ni useCallback ga o'rang yoki funksiyani komponentdan tashqariga chiqaring. Murakkab komponentlarni kichiklarga bo'ling — har bir komponent interfeysning bir mantiqiy birligi uchun javobgar bo'lishi kerak.

Tez-tez beriladigan savollar

JSX ni Reactsiz ishlatish mumkinmi?

Ha, Babel plagini @babel/plugin-transform-react-jsx orqali JSX ni istalgan kutubxona uchun sozlash mumkin. SolidJS, Preact, Nerv va boshqa freymvorklar JSX ni o'zlarining ish vaqti muhitlari bilan ishlatadi. To'liq mustaqillik uchun pragma ni o'z funksiyangizga o'rnatishingiz mumkin.

Nega JSX da class o'rniga className ishlatiladi?

class JavaScript da himoyalangan so'zdir. JSX createElement ga transpilatsiya qilinadi, bu erda ikkinchi argument sifatida props obyekti uzatiladi. class xususiyati ES6 sinf sintaksisi bilan ziddiyatga ega, shuning uchun React className ni tanladi.

JSX da bir nechta klasslarni qanday qo'shish mumkin?

Shablon satrlaridan yoki classnames kutubxonasidan foydalaning: className={`“btn ${isActive ? 'active' : ''}”`}. Murakkab mantiq uchun obyekt va massivlarni qabul qiluvchi clsx yoki classnames npm paketini ulang.

JSX shartli konstruksiyalarni qo'llab-quvvatlaydimi?

JSX faqat ifodalarni qo'llab-quvvatlaydi, ko'rsatmalarni emas. Shartlar uchun uchlik operator, mantiqiy AND (&&) yoki mantiqiy OR (||) dan foydalaning. Murakkab mantiq uchun shartni alohida o'zgaruvchi yoki funksiyaga ajrating.

Nega JSX da ro'yxatlar uchun key kerak?

key atributi React ga qayta render paytida ro'yxat elementlarini identifikatsiya qilishga yordam beradi. Kalitsiz React o'zgarishda butun ro'yxatni qayta chizadi. Noyob kalit bilan React DOM tugunlarini qayta ishlatadi va elementlarni qayta yaratish o'rniga ularni tartibga soladi.

Xulosa

  • JSX — UI ni deklarativ tavsiflash uchun XML-ga o'xshash JavaScript kengaytmasi, matn shablonlariga muqobil.
  • Jingalak qavslar har qanday JS ifodalarini — o'zgaruvchilar, funksiyalar, uchlik operatorlarni kiritish imkonini beradi.
  • Atributlar JSX da camelCase da yoziladi, stillar obyekt sifatida uzatiladi, boolean atributlar aniq ko'rsatiladi.
  • Transpilatsiya JSX dan createElement ga Babel yoki TypeScript tomonidan avtomatik amalga oshiriladi.
  • Bitta ildiz elementi yoki fragment har bir JSX ifodasi uchun majburiydir.
  • JSX React dan tashqari — SolidJS, Preact, Vue va Qwik ham JSX ni o'z ish vaqti muhitlari orqali qo'llab-quvvatlaydi.
  • TypeScript .tsx kengaytmasi bilan propslar va JSX atributlarining to'liq tiplashtirilishini ta'minlaydi.

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing