← Назад к вопросам

Может ли React работать без JSX?

1.7 Middle🔥 111 комментариев
#React#Архитектура и паттерны

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI4 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Да, React может работать без JSX. Это фундаментальная особенность архитектуры React.

JSX — это синтаксическое расширение для JavaScript, которое позволяет писать HTML-подобный код внутри JavaScript. Он не является обязательным для использования React. Под капотом JSX компилируется (чаще всего с помощью Babel или TypeScript) в вызовы функции React.createElement(). Следовательно, вы можете использовать React, напрямую вызывая эту функцию и другие API React.

Как работает компиляция JSX

Простейший пример на JSX:

const element = <h1 className="greeting">Hello, world!</h1>;

Компилятор преобразует этот код в:

const element = React.createElement(
  'h1',
  { className: 'greeting' },
  'Hello, world!'
);

Функция React.createElement() (часто называемая "createElement") принимает три аргумента:

  1. type: Строка (для HTML-тегов, например, 'div', 'h1') или ссылка на компонент (функцию или класс).
  2. props: Объект, содержащий свойства (атрибуты) элемента, или null, если их нет.
  3. children: Один или несколько дочерних элементов (строки, числа, другие элементы, созданные createElement).

Пример приложения на React без JSX

Давайте создадим простой компонент, отображающий список, используя только чистый JavaScript.

// Импорт React и ReactDOM (для веб-приложений)
import React from 'react';
import ReactDOM from 'react-dom/client';

// 1. Создание простого элемента
const titleElement = React.createElement(
  'h1',
  { id: 'main-title', style: { color: 'blue' } },
  'Список пользователей'
);

// 2. Создание компонента как функции
function UserList(props) {
  // Создаем элементы списка динамически, на основе props.users
  const listItems = props.users.map((user) =>
    React.createElement(
      'li',
      {
        key: user.id, // Ключ (key) важен для React при работе со списками
        className: 'user-item',
      },
      `${user.name} (${user.email})`
    )
  );

  // Возвращаем корневой элемент компонента
  return React.createElement(
    'ul',
    { className: 'user-list' },
    listItems  // Дочерние элементы передаются как массив
  );
}

// Данные для компонента
const usersData = [
  { id: 1, name: 'Анна', email: 'anna@example.com' },
  { id: 2, name: 'Иван', email: 'ivan@example.com' },
  { id: 3, name: 'Мария', email: 'maria@example.com' },
];

// 3. Создание основного элемента приложения, содержащего и заголовок, и список
const appElement = React.createElement(
  'div',
  null,
  titleElement, // Первый дочерний элемент
  React.createElement(UserList, { users: usersData }) // Второй дочерний элемент
);

// 4. Рендеринг приложения в корневой элемент DOM
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(appElement);

Преимущества и недостатки подхода без JSX

Преимущества:

  • Полный контроль: Вы видите "голый" JavaScript, что иногда полезно для глубокого понимания работы React.
  • Отсутствие необходимости в настройке сборки: Теоретически, вы можете запустить React-код в среде без транспилятора (хотя на практике современные проекты используют модули и сборку).
  • Ясность для небольших вставок: В некоторых специфических случаях прямое использование createElement может быть более читаемым, чем сложный JSX.

Недостатки (почему JSX стал де-факто стандартом):

  • Низкая читаемость и удобство сопровождения: Код быстро становится громоздким и "шумным", особенно для сложных деревьев элементов. Вложенные вызовы createElement сложно анализировать визуально.
  • Меньшая продуктивность: Написание и изменение верстки занимает значительно больше времени.
  • Отсутствие привычных инструментов: Многие линтеры, плагины редакторов кода и системы типов (TypeScript) хуже работают с createElement, чем с JSX.

Практические сценарии использования

Хотя в полномасштабных проектах JSX почти всегда предпочтительнее, подход без JSX может быть полезен в определенных ситуациях:

  • Создание динамических компонентов высокой сложности, где структура генерируется алгоритмически.
  • Образовательные цели, для демонстрации фундаментальных принципов React.
  • Очень специфичные окружения, где настройка транспиляции JSX невозможна (например, некоторые серверные или встраиваемые среды), но выполнение чистого JavaScript возможно.

Вывод: React — это библиотека для работы с виртуальным DOM и компонентной архитектурой, написанная на JavaScript. JSX — это лишь удобный, высокоуровневый синтаксический сахар для описания этой архитектуры. Все возможности React полностью доступны без него через JavaScript API, но использование JSX делает разработку несравнимо более эффективной и удобной. Современный стек разработки (Babel, Webpack/Vite, TypeScript) идеально адаптирован для работы с JSX, что делает его неотъемлемой частью экосистемы React.

Может ли React работать без JSX? | PrepBro