JSX: JavaScript uzantısı ve kullanım örnekleri

Yazar: IT Sectr Yayınlanma: 2026-07-03 Okuma süresi: 10 dk

JSX, React ekibi tarafından kullanıcı arayüzlerini bildirimsel olarak tanımlamak için geliştirilen, JavaScript için XML benzeri bir sözdizimi uzantısıdır. Şablon motorlarının aksine JSX, sıradan JavaScript işlev çağrılarına derlenir ve işaretleme içinde dilin tüm gücünü verir. React, 2024’e göre JSX, tüm modern React çerçeveleri ve kütüphanelerinde desteklenmektedir.

Anahtar Noktalar

  • JSX, React.createElement üzerinde sözdizimsel şekerdir ve JavaScript’te HTML benzeri işaretleme yazmayı sağlar.
  • İfadeler JSX’te küme parantezleri aracılığıyla gömülür — herhangi bir JS ifadesi kullanılabilir.
  • Nitellikler JSX’te camelCase (className, onClick, tabIndex) ile yazılır, kebab-case ile değil.
  • Dönüştürme JSX’ten JS’ye, tarayıcıda çalıştırılmadan önce Babel, TypeScript veya esbuild tarafından yapılır.
  • XSS koruması yerleşiktir — React, işleme almadan önce tüm değerleri kaçırarak enjeksiyonları önler.

JSX Nedir?

JSX (JavaScript XML), ilk olarak 2013 yılında React’te tanıtılan bir JavaScript sözdizimi uzantısıdır. Geliştiricilerin, kullanıcı arayüzünün yapısını bildirimsel bir tarzda tanımlamasına, işaretleme ve mantığı tek bir dosyada birleştirmesine olanak tanır.

JSX’ten önce, geliştiriciler dize şablonları (Mustache, Handlebars) kullanıyor veya document.createElement aracılığıyla manuel olarak DOM öğeleri oluşturuyordu. Her iki yaklaşımın da dezavantajları vardı: dize şablonları tür denetimine tabi değildi ve manuel DOM oluşturma hantal ve hataya açıktı.

React farklı bir yol seçti — işaretlemeyi doğrudan koda gömmek. Bu karar toplulukta tartışmalara yol açtı, ancak zamanla standart haline geldi. Bugün JSX yalnızca React’te değil, aynı zamanda SolidJS, Preact, Qwik ve hatta Vue’de eklentiler aracılığıyla kullanılmaktadır.

JSX Temel Sözdizimi

JSX öğesi bir HTML etiketi gibi görünür ancak doğrudan JavaScript’e gömülüdür. Her öğe, üç bağımsız değişkenle React.createElement çağrısına dönüştürülür: öğe türü, props nesnesi ve alt öğeler. Tek bir kök öğe zorunlu bir kuraldır: bir JSX ifadesi bir ana öğe veya parça döndürmelidir.

js
import React from 'react';

// Temel JSX - tek kök öğe
const element = (
  <div className="app">
    <h1>Hello, World!</h1>
    <p>Welcome to React</p>
  </div>
);

Gruplama İçin Parçalar

Ek DOM düğümü gerekmediğinde, React.Fragment veya kısa sözdizimi <></> kullanın. Parçalar gerçek bir DOM öğesi oluşturmaz, yalnızca alt düğümleri gruplandırır. Bu, özellikle fazladan bir sarmalayıcının HTML yapısını bozacağı tablolar ve listelerde kullanışlıdır.

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

JSX’te İfadeler ve Değişkenler

Herhangi bir JavaScript ifadesi, küme parantezleri { } aracılığıyla JSX’e gömülür. İçinde değişkenler, işlev çağrıları, üçlü operatörler ve dizi yöntemleri kullanabilirsiniz. Koşullu işleme, üçlü operatör veya mantıksal VE aracılığıyla yapılır.

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

Temel bir sınırlama — küme parantezleri içinde yalnızca ifadeler kullanılabilir, deyimler kullanılamaz. if/else, for, switch kullanamazsınız — yalnızca üçlü operatör, mantıksal operatörler ve dizi yöntemleri. Ok işlevleri dahil olmak üzere işlev çağrılarına izin verilir.

JSX ve HTML Arasındaki Farklar

JSX görsel olarak HTML’e benzer ancak temel farklılıkları vardır. Nitellikler camelCase ile yazılır — class yerine className, onclick yerine onClick, tabindex yerine tabIndex. Bunun nedeni JSX’in JavaScript’e dönüştürülmesi ve özellik adlarında tire kullanılamamasıdır.

HTMLJSXNeden
class="wrapper"className="wrapper"class JS’de ayrılmış sözcük
onclick="handle()"onClick={handle}JS özellikleri için camelCase
style="color: red"style={{ color: ‘red’ }}Dize yerine stil nesnesi
<input disabled><input disabled={true}>Açık boolean nitelikler

Bir diğer önemli fark — kendi kendine kapanan etiketler. HTML’de bazı etiketler (br, hr, input) kapatılmadan bırakılabilir. JSX’te tüm kendi kendine kapanan etiketlerde kapanış eğik çizgisi bulunmalıdır: <br />, <input />. SVG nitelik adları da camelCase’e dönüştürülür: strokeWidth, fillOpacity.

JSX JavaScript’e Nasıl Dönüştürülür

Tarayıcılar JSX’i doğrudan anlamaz. Çalıştırmadan önce JSX kodu bir dönüştürücüden — Babel, TypeScript veya esbuild — geçer. Her JSX öğesi bir createElement veya jsx/runtime çağrısına dönüştürülür.

Babel ile Dönüşüm

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

// Dönüştürmeden sonra
const element = React.createElement(
  'h1',
  { className: 'title' },
  'Hello'
);

React 17 ile React’i içe aktarmayı gerektirmeyen yeni bir JSX dönüşümü ortaya çıktı. jsx-runtime’ın otomatik içe aktarımı, import React from ‘react’ olmadan bileşen yazmayı sağlar. Babel ve TypeScript, {"runtime": "automatic"} yapılandırması aracılığıyla bu dönüşümü destekler.

React Dışında JSX: Solid, Preact, Vue

JSX React ile ilişkilendirilse de diğer çerçeveler de onu kullanır. SolidJS, Sanal DOM olmadan gerçek DOM düğümlerine derleme ile JSX kullanır. Preact, tam JSX desteği sunan React’e hafif bir alternatiftir. Vue, @vue/babel-plugin-jsx aracılığıyla JSX’i destekler, ancak ana şablonu template’dir.

Temel bir fark ifade anlambilimidir. React’te JSX ifadeleri her işlemede yürütülür. SolidJS’de JSX bir kez derlenir ve güncellemeler sinyaller aracılığıyla izlenir. Bu performansı etkiler: SolidJS Sanal DOM ve uzlaşma gerektirmez, bu da JSX işlemesini hızlandırır.

TypeScript’te JSX dil düzeyinde desteklenir. .tsx uzantılı dosyalar otomatik olarak JSX sözdizimini işler. Props yazımı, TypeScript + JSX’in ana avantajlarından biridir: IDE beklenen nitelikleri, geri çağırma türlerini ve props zorunluluğunu önerir.

JSX ile En İyi Uygulamalar

Okuması ve bakımı kolay JSX kodu yazın. Karmaşık ifadeleri ayrı değişkenlere veya işlevlere çıkarın — bu okunabilirliği artırır ve mantığı işaretlemeden ayrı olarak test etmeyi sağlar. Gereksiz div sarmalayıcılar yerine parçalar kullanın.

Girinti kuralı — iç içe öğeler için girintiyi koruyun. Her iç içe geçme düzeyi bir girinti düzeyidir. Kapanış etiketi, açılış etiketiyle aynı düzeyde olmalıdır. Uzun nitelikler için satır sonları kullanın.

Her işlemede oluşturuluyorlarsa props’ta satır içi ok işlevlerinden kaçının. Bu gibi durumlarda, geri çağırmayı useCallback ile sarın veya işlevi bileşenin dışına taşıyın. Karmaşık bileşenleri daha küçük olanlara bölün — her bileşen arayüzün bir mantıksal birimini işlemelidir.

Sıkça Sorulan Sorular

JSX React olmadan kullanılabilir mi?

Evet, Babel eklentisi @babel/plugin-transform-react-jsx aracılığıyla JSX herhangi bir kütüphane için yapılandırılabilir. SolidJS, Preact, Nerv ve diğer çerçeveler kendi çalışma zamanlarıyla JSX kullanır. Tam bağımsızlık için, pragma’ı kendi işlevinize ayarlayabilirsiniz.

JSX’te class yerine neden className kullanılır?

class JavaScript’te ayrılmış bir sözcüktür. JSX, ikinci bağımsız değişkenin bir props nesnesi ilettiği createElement’e dönüştürülür. class özelliği ES6 sınıf sözdizimiyle çelişir, bu nedenle React className’i seçmiştir.

JSX’te birden çok sınıf nasıl eklenir?

Şablon dizeleri veya classnames kütüphanesini kullanın: className={`btn ${isActive ? ‘active’ : ‘’}`}. Karmaşık mantık için, nesneleri ve dizileri kabul eden npm paketi clsx veya classnames’i yükleyin.

JSX koşullu yapıları destekler mi?

JSX yalnızca ifadeleri destekler, deyimleri değil. Koşullar için üçlü operatörü, mantıksal VE (&&) veya mantıksal VEYA (||) kullanın. Karmaşık mantık için, koşulu ayrı bir değişkene veya işleve çıkarın.

JSX’te listeler için neden key gerekir?

key niteliği, React’in yeniden işleme sırasında liste öğelerini tanımlamasına yardımcı olur. Anahtar olmadan React, değişiklikte tüm listeyi yeniden işler. Benzersiz bir anahtarla React, DOM düğümlerini yeniden kullanır ve öğeleri yeniden oluşturmak yerine yeniden sıralar.

Özet

  • JSX, bildirimsel UI açıklaması için XML benzeri bir JavaScript uzantısıdır, dize şablonlarına alternatiftir.
  • Küme parantezleri herhangi bir JS ifadesini (değişkenler, işlevler, üçlü operatörler) gömmeyi sağlar.
  • Nitelikler JSX’te camelCase ile yazılır, stiller nesne olarak iletilir, boolean nitelikler açıktır.
  • Dönüştürme JSX’ten createElement’e Babel veya TypeScript tarafından otomatik olarak yapılır.
  • Her JSX ifadesi için tek bir kök öğe veya parça gereklidir.
  • React dışında JSX — SolidJS, Preact, Vue ve Qwik, kendi çalışma zamanları aracılığıyla JSX’i destekler.
  • TypeScript .tsx uzantısıyla JSX props ve niteliklerinin tam yazımını sağlar.

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun