JSX: JavaScript genişlənməsi və istifadə nümunələri

Müəllif: IT Sectr Dərc olunub: 2026-07-03 Oxuma vaxtı: 10 dəq

JSX — istifadəçi interfeyslərini deklarativ şəkildə təsvir etmək üçün React komandası tərəfindən hazırlanmış XML-əbənzər JavaScript sintaksis genişlənməsidir. Şablon mühərriklərindən fərqli olaraq, JSX adi JavaScript funksiya çağırışlarına kompilyasiya olunur ki, bu da işarələmə daxilində dilin tam gücünü verir. React, 2024-ə görə, JSX bütün müasir React freymvorkları və kitabxanaları tərəfindən dəstəklənir.

Əsas məqamlar

  • JSX — React.createElement üzərində sintaktik şəkər, JavaScript-də HTML-əbənzər işarələmə yazmağa imkan verir.
  • İfadələr JSX-də qıvrım mötərizələr vasitəsilə daxil edilir — istənilən JS ifadələrindən istifadə oluna bilər.
  • Atributlar JSX-də camelCase ilə yazılır (className, onClick, tabIndex), kebab-case ilə deyil.
  • Transpilasiya JSX-dən JS-ə Babel, TypeScript və ya esbuild tərəfindən brauzerdə icra edilməzdən əvvəl həyata keçirilir.
  • XSS mühafizəsi daxilidir — React render etmədən əvvəl bütün dəyərləri escap edir, inyeksiyaların qarşısını alır.

JSX nədir?

JSX (JavaScript XML) — 2013-cü ildə React-də təqdim edilmiş JavaScript üçün sintaksis genişlənməsidir. Bu, proqramçılara istifadəçi interfeysinin strukturunu deklarativ üslubda təsvir etməyə, işarələmə və məntiqi bir faylda birləşdirməyə imkan verir.

JSX-dən əvvəl proqramçılar mətn şablonlarından (Mustache, Handlebars) istifadə edir və ya DOM elementlərini əl ilə document.createElement vasitəsilə yaradırdılar. Hər iki yanaşmanın çatışmazlıqları var idi: mətn şablonları tiplərə görə yoxlanılmırdı, əl ilə DOM yaratmaq isə çətin və səhvlərə meylli idi.

React fərqli bir yol seçdi — işarələməni birbaşa kodun içinə yerləşdirmək. Bu qərar icmada mübahisələrə səbəb oldu, lakin zamanla standarta çevrildi. Bu gün JSX təkcə React-də deyil, həm də SolidJS, Preact, Qwik və hətta Vue-də plaginlər vasitəsilə istifadə olunur.

JSX-in əsas sintaksisi

JSX elementi HTML teqinə bənzəyir, lakin birbaşa JavaScript-ə yerləşdirilir. Hər bir element üç arqumentlə React.createElement çağırışına transpilasiya olunur: elementin tipi, props obyekti və uşaq elementlər. Bir kök element — məcburi qayda: JSX ifadəsi bir valideyn element və ya fraqment qaytarmalıdır.

js
import React from 'react';

// Əsas JSX - tək kök element
const element = (
  <div className="app">
    <h1>Hello, World!</h1>
    <p>Welcome to React</p>
  </div>
);

Qruplaşdırma üçün fraqmentlər

Əlavə DOM düyünü lazım olmadıqda, React.Fragment və ya qısa sintaksisdən <></> istifadə edin. Fraqmentlər real DOM elementi yaratmır, yalnız uşaq düyünləri qruplaşdırır. Bu, xüsusilə cədvəllərdə və siyahılarda faydalıdır, burada əlavə bürümə HTML strukturunu poza bilər.

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

JSX-də ifadələr və dəyişənlər

İstənilən JavaScript ifadəsi JSX-ə qıvrım mötərizələr vasitəsilə daxil edilir { }. Daxildə dəyişənlərdən, funksiya çağırışlarından, üçlü operatorlardan və massiv metodlarından istifadə oluna bilər. Şərti render üçlü operator və ya məntiqi AND vasitəsilə həyata keçirilir.

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>
  );
}

Əsas məhdudiyyət — qıvrım mötərizələr daxilində yalnız ifadələrdən istifadə etmək olar, təlimatlar yox. if/else, for, switch istifadə etmək olmaz — yalnız üçlü operator, məntiqi operatorlar və massiv metodları. Funksiya çağırışları, o cümlədən ox funksiyaları icazəlidir.

JSX və HTML arasındakı fərqlər

JSX vizual olaraq HTML-ə bənzəyir, lakin prinsipial fərqlərə malikdir. Atributlar camelCase ilə yazılır — className class əvəzinə, onClick onclick əvəzinə, tabIndex tabindex əvəzinə. Bu, JSX-in JavaScript-ə transpilasiya olunması ilə bağlıdır, burada xassə adında defis yolverilməzdir.

HTMLJSXSəbəb
class="wrapper"className="wrapper"class — JS-də qorunan söz
onclick="handle()"onClick={handle}JS xassələri üçün camelCase
style="color: red"style={{ color: 'red' }}Mətn əvəzinə stil obyekti
<input disabled><input disabled={true}>Boolean atributların açıq göstərilməsi

Digər vacib fərq — öz-özünə bağlanan teqlər. HTML-də bəzi teqlər (br, hr, input) bağlanmaya bilər. JSX-də bütün öz-özünə bağlanan teqlər bağlanan xəttə malik olmalıdır: <br />, <input />. SVG atribut adları da camelCase-ə çevrilir: strokeWidth, fillOpacity.

JSX JavaScript-ə necə transpilasiya olunur

Brauzerlər JSX-i birbaşa başa düşmür. İcradan əvvəl JSX kodu transpilatordan — Babel, TypeScript və ya esbuild-dən keçir. Hər bir JSX elementi createElement və ya jsx/runtime çağırışına çevrilir.

Babel vasitəsilə transformasiya

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

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

React 17-dən etibarən React importu tələb etməyən yeni JSX transformasiyası meydana çıxdı. Avtomatik import jsx-runtime import React from 'react' olmadan komponentlər yazmağa imkan verir. Babel və TypeScript bu transformasiyanı {"runtime": "automatic"} parametri ilə dəstəkləyir.

JSX React-dən kənar: Solid, Preact, Vue

JSX React ilə assosiasiya olunsa da, digər freymvorklar da ondan istifadə edir. SolidJS JSX-i Virtual DOM olmadan real DOM düyünlərinə kompilyasiya ilə istifadə edir. Preact — JSX-in tam dəstəyi ilə React-in yüngül alternativi. Vue @vue/babel-plugin-jsx vasitəsilə JSX-i dəstəkləyir, baxmayaraq ki, onun əsas şablonu templatedir.

Əsas fərq — ifadələrin semantikası. React-də JSX ifadələri hər renderdə icra olunur. SolidJS-də JSX bir dəfə kompilyasiya olunur və yeniləmələr siqnallar vasitəsilə izlənilir. Bu, performansa təsir edir: SolidJS Virtual DOM və reconsiliasiya tələb etmir, buna görə JSX renderi daha sürətlidir.

TypeScript-də JSX dil səviyyəsində dəstəklənir. .tsx genişlənməsi olan fayllar avtomatik olaraq JSX sintanksisini emal edir. Propsların tipləşdirilməsi — TypeScript + JSX-in əsas üstünlüklərindən biri: IDE gözlənilən atributları, callback tiplərini və propsların məcburiliyini göstərir.

JSX ilə işin ən yaxşı təcrübələri

Oxumaq və saxlamaq asan olan JSX kodu yazın. Mürəkkəb ifadələri ayrı-ayrı dəyişənlərə və ya funksiyalara çıxarın — bu, oxunaqlılığı yaxşılaşdırır və məntiqi işarələmədən ayrı test etməyə imkan verir. Lazımsız div bürümələri əvəzinə fraqmentlərdən istifadə edin.

Abzas qaydası — iç-içə elementlər üçün abzaslara riayət edin. Hər iç-içə səviyyəsi bir abzas səviyyəsidir. Bağlanan teq açılan teqin səviyyəsində olmalıdır. Uzun atributlar üçün sətir qırmasından istifadə edin.

Propslarda inline ox funksiyalarından çəkinin, əgər onlar hər renderdə yaradılırsa. Belə hallarda callback-i useCallback-ə bürüyün və ya funksiyanı komponentin xaricinə çıxarın. Mürəkkəb komponentləri daha kiçiklərə bölün — hər komponent interfeysin bir məntiqi vahidinə cavabdeh olmalıdır.

Tez-tez verilən suallar

JSX-i React olmadan istifadə etmək olar?

Bəli, Babel plagin @babel/plugin-transform-react-jsx vasitəsilə JSX-i istənilən kitabxana üçün konfiqurasiya etmək olar. SolidJS, Preact, Nerv və digər freymvorklar JSX-i öz icra mühitləri ilə istifadə edir. Tam müstəqillik üçün pragma-ı öz funksiyanıza təyin edə bilərsiniz.

Niyə JSX-də class əvəzinə className istifadə olunmalıdır?

class JavaScript-də qorunan sözdür. JSX createElement-ə transpilasiya olunur, burada ikinci arqument kimi props obyekti ötürülür. class xassəsi ES6 sinif sintaksisi ilə ziddiyyət təşkil edir, buna görə React className seçdi.

JSX-də bir neçə class-ı necə əlavə etmək olar?

Şablon sətirlərindən və ya classnames kitabxanasından istifadə edin: className={`“btn ${isActive ? 'active' : ''}”`}. Mürəkkəb məntiq üçün obyekt və massivləri qəbul edən clsx və ya classnames npm paketini qoşun.

JSX şərti konstruksiyaları dəstəkləyir?

JSX yalnız ifadələri dəstəkləyir, təlimatları yox. Şərtlər üçün üçlü operator, məntiqi AND (&&) və ya məntiqi OR (||) istifadə edin. Mürəkkəb məntiq üçün şərti ayrı dəyişənə və ya funksiyaya çıxarın.

Niyə JSX-də siyahılar üçün key lazımdır?

key atributu React-ə yenidən render zamanı siyahı elementlərini identifikasiya etməyə kömək edir. Açar olmadan React dəyişiklik zamanı bütün siyahını yenidən çəkir. Unikal açar ilə React DOM düyünlərini təkrar istifadə edir və elementləri yenidən yaratmaq əvəzinə onları sıralayır.

Nəticə

  • JSX — UI-ni deklarativ təsvir etmək üçün XML-əbənzər JavaScript genişlənməsi, mətn şablonlarına alternativ.
  • Qıvrım mötərizələr istənilən JS ifadələrini — dəyişənləri, funksiyaları, üçlü operatorları daxil etməyə imkan verir.
  • Atributlar JSX-də camelCase ilə yazılır, stillər obyekt kimi ötürülür, boolean atributlar açıq şəkildə göstərilir.
  • Transpilasiya JSX-dən createElement-ə Babel və ya TypeScript tərəfindən avtomatik həyata keçirilir.
  • Bir kök element və ya fraqment hər JSX ifadəsi üçün məcburidir.
  • JSX React-dən kənar — SolidJS, Preact, Vue və Qwik də JSX-i öz icra mühitləri vasitəsilə dəstəkləyir.
  • TypeScript .tsx genişlənməsi ilə propsların və JSX atributlarının tam tipləşdirilməsini təmin edir.

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun