Этот вопрос проверяет знание JSX — синтаксиса, который используется в React для описания пользовательских интерфейсов.
JSX (JavaScript XML) — это расширение синтаксиса JavaScript, которое позволяет писать HTML-подобный код прямо в JavaScript. Он используется в React для описания того, как должен выглядеть интерфейс. JSX упрощает создание компонентов, объединяя разметку и логику в одном месте.
Пример:
const element = <h1>Привет, мир!</h1>;Под капотом JSX преобразуется в вызовы функций, например:
React.createElement('h1', null, 'Привет, мир!');JSX — это синтаксическое расширение JavaScript, разработанное специально для React. Он позволяет писать код, похожий на HTML, который встраивается в JavaScript. Хотя он напоминает HTML, это не HTML: JSX имеет свои правила и ограничения.
Читабельность: Код становится более понятным, так как разметка и логика расположены рядом.
Гибкость: JSX позволяет использовать JavaScript внутри разметки с помощью {}.
Эффективность: React использует JSX для создания виртуального DOM, оптимизируя процесс обновления интерфейса.
JSX — это всего лишь синтаксический сахар. Перед выполнением браузером он компилируется в вызовы React.createElement(). Например:
const element = <h1>Привет!</h1>;Компилируется в:
const element = React.createElement('h1', null, 'Привет!');Встраивание JavaScript
Внутри JSX можно использовать выражения JavaScript, заключённые в {}:
const name = "Мир";
const element = <h1>Привет, {name}!</h1>;Атрибуты
В JSX используются атрибуты, похожие на HTML, но с особенностями JavaScript. Например, вместо class используется className, а для событий — onClick.
const button = <button className="primary" onClick={() => alert("Клик!")}>Кликни</button>;Дочерние элементы
Можно передавать элементы и компоненты как дочерние:
const element = (
<div>
<h1>Заголовок</h1>
<p>Текст абзаца</p>
</div>
);Фрагменты
Для группировки элементов без лишнего контейнера используется React.Fragment или <>.
const element = (
<>
<h1>Заголовок</h1>
<p>Текст абзаца</p>
</>
);function Greeting(props) {
return <h1>Привет, {props.name}!</h1>;
}
function App() {
return (
<div>
<Greeting name="Мир" />
<Greeting name="React" />
</div>
);
}Единый родительский элемент: Каждый JSX-блок должен быть обёрнут в один корневой элемент.
CamelCase для атрибутов: Например, onClick, className.
Закрывающие теги: Все элементы должны быть закрыты, даже одиночные:
<img src="image.jpg" alt="картинка" />JSX по умолчанию предотвращает выполнение вредоносного кода, экранируя все вставки JavaScript. Например:
const userInput = "<script>alert('вредоносный код')</script>";
const element = <div>{userInput}</div>; // Вставка будет безопаснойУдобный синтаксис для работы с интерфейсами.
Легкость интеграции JavaScript.
Ясность кода.
Требуется этап компиляции (Babel).
Начинающим может быть сложнее освоить по сравнению с обычным HTML.
JSX — это инструмент для разработки в React, который сочетает удобство написания разметки с возможностями JavaScript. Он делает код более выразительным и гибким, упрощая процесс создания интерфейсов.