PassFront
  1. PassFront
  2. База знаний
  3. Компоненты

Почему 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.

Другие вопросы раздела