Czym jest JSX (JavaScript XML)

Czym jest JSX (JavaScript XML)

JSX to rozszerzenie składni JavaScript, które pozwala pisać struktury podobne do HTML bezpośrednio w kodzie JavaScript. Został stworzony przez zespół Facebooka (obecnie Meta) w 2013 roku jako część biblioteki React i od tego czasu stał się standardem w ekosystemie frontendowym.

Zamiast rozdzielać logikę i wygląd do osobnych plików (JavaScript + HTML), JSX łączy je w jednym miejscu. Kompilator (np. Babel) przekształca składnię JSX na zwykłe wywołania funkcji JavaScript.

Jesli więc użyjesz w kodzie składni JSX:

const element = <h1>Hello World!</h1>;

kompilator zamieni ją na zwykły javaScript:

const element = React.createElement('h1', null, 'Hello World!');

Przykłady kodu JSX

funkcja renderująca z warunkiem:

function Greeting({ isLoggedIn }) {
  return (
    <div>
      {isLoggedIn ? (
        <p>Hello World!</p>
      ) : (
        <p>Log in please.</p>
      )}
    </div>
  );
}

lista z mapowaniem elementów:

const items = ["JSX", "React", "Hooks"];

function List() {
  return (
    <ul>
      {items.map(item => (
        <li key={item}>{item}</li>
      ))}
    </ul>
  );
}

Przycisk z akcją:

const element = (
  <button 
    onClick={() => console.log('clicked!)}
    style={{ backgroundColor: "blue", color: "white" }}
  >
    Click me
  </button>
);

Kluczowe różnice względem HTML

W JSX używa się className zamiast class (bo class to słowo kluczowe JS), htmlFor zamiast for, a wszystkie tagi muszą być zamknięte, również te samozamykające jak <img /> czy <br />.

Rozszerzenia plików: .js vs .jsx – kiedy używać którego ?

Tradycyjne podejście zakładało, że pliki zawierające czysty javaScript oznaczane są rozszerzeniem .js, a pliki zawirające składnię JSX zapisuje się z końcówką .jsx, jednak obecnie wiele projektów używa wyłącznie rozszerzenia .js, nawet jeśli kod zawira JSX. Nowoczesne bundlery jak Vite, Webpack czy esbuild bez problemu rozpoznają JSX w plikach .js.

Inaczej wygląda sytuacja w przypadku TypeScriptrozszerzenie .tsx jest obowiązkowe dla plików zawierających JSX. Kompilator TypeScript wyrzuci błąd, jeśli użyjesz JSX w pliku .ts. Rozszerzenie .ts zaś jest zarezerwowane dla plików zawierających tylko logikę, bez elementów UI.

Podsumowanie

JSX znacząco ułatwia tworzenie nowoczesnych interfejsów, łącząc logikę i strukturę w spójny, intuicyjny sposób. Dzięki swojej czytelności i dużej elastyczności stał się standardem w wielu bibliotekach frontendowych, nie tylko w React.