JSX - синтаксичне розширення JavaScript, що дозволяє писати розмітку прямо в коді. Браузер його не розуміє: компілятор (Babel, esbuild, SWC, TypeScript) перетворює JSX на виклики функцій.
const element = <h1 className="title">Привіт, {user.name}</h1>;
// після компіляції (новий JSX transform)
import { jsx as _jsx } from 'react/jsx-runtime';
const element = _jsx('h1', { className: 'title', children: ['Привіт, ', user.name] });
Результат - звичайний об'єкт-опис («React element»), а не DOM-вузол. React потім вирішує, як привести DOM у відповідність.
Відмінності від HTML:
classNameзамістьclass,htmlForзамістьfor- бо це JavaScript-властивості.- Атрибути в camelCase:
onClick,tabIndex;style- об'єкт:style={{ marginTop: 8 }}. - Кожен тег закривається:
<img />,<br />. - Компонент повертає один корінь. Для кількох елементів - фрагмент
<>...</>. - У фігурних дужках - вирази, не інструкції:
{isAdmin && <Badge />},{items.map(...)}, але неifчиfor.
Безпека: значення в {} автоматично екрануються, тож рядок з <script> виведеться як текст. Небезпечний лише явний dangerouslySetInnerHTML.
Компонент - функція, що повертає JSX. Назва з великої літери обов'язкова: <profile /> React вважатиме HTML-тегом, <Profile /> - компонентом.