Почему JSX используется в React?
Компоненты
JSX в React используется потому, что описывать UI разметкоподобным синтаксисом внутри JavaScript оказалось удобнее двух альтернатив: строковых шаблонов и ручных вызовов createElement.
Философия: разметка и логика вместе
Классический подход разделял технологии: HTML отдельно, JS отдельно. React исходит из того, что рендеринг и логика одного компонента связаны по смыслу — и разделять надо по компонентам, а не по типам файлов. JSX позволяет держать разметку рядом с данными и обработчиками:
const Cart = ({ items }) => (
<ul>
{items.map((item) => (
<li key={item.id} onClick={() => open(item)}>
{item.title} — {formatPrice(item.price)}
</li>
))}
</ul>
);Почему не строки-шаблоны (как в Angular/Vue)
- В шаблонах — собственный мини-язык (v-for, *ngIf, фильтры); в JSX — обычный JavaScript: map, тернарники, переменные, функции.
- Полная поддержка инструментов: типизация TypeScript, автокомплит, рефакторинг, линтеры работают с JSX как с кодом.
- Ошибки ловятся на компиляции, а не в рантайме.
Почему не чистый createElement
JSX — сахар над jsx('ul', {...}). Писать вызовы вручную можно, но вложенная структура дерева в них не читается; JSX визуально повторяет структуру UI.
Бонусы
- Автоэкранирование значений — защита от XSS по умолчанию.
- Единый синтаксис для DOM-тегов и компонентов (
<div>/<UserCard>). - JSX не привязан к React — его используют и другие библиотеки (Preact, Solid).
Коротко для собеседования
JSX выбран, потому что: разметка и логика компонента связаны и живут вместе; вместо шаблонного мини-языка — полноценный JavaScript с типизацией и тулингом; читается как структура UI, а компилируется в обычные вызовы функций; значения автоэкранируются. Это удобство разработчика, а не требование React — технически можно писать createElement.