1. Введение в React: синтаксис JSX, компоненты и работа Virtual DOM
Введение в React: синтаксис JSX, компоненты и работа Virtual DOM
Добро пожаловать на курс «Основы разработки веб-приложений на React JS». Это первая статья нашего цикла, в которой мы заложим фундамент для понимания одной из самых популярных библиотек в мире фронтенд-разработки. Сегодня мы разберем, почему React изменил подход к созданию интерфейсов, из чего он состоит и какая «магия» происходит под капотом.
Что такое React и зачем он нужен?
React — это JavaScript-библиотека для создания пользовательских интерфейсов, разработанная и поддерживаемая компанией Facebook (ныне Meta). Впервые она была представлена в 2013 году и с тех пор стала де-факто стандартом в индустрии.
До появления React разработка веб-приложений часто сводилась к «императивному» подходу. Программист должен был точно указывать браузеру, как изменить страницу: «найди этот элемент, удали у него класс, добавь новый текст, измени цвет». С ростом сложности приложений такой код превращался в запутанный клубок, который сложно поддерживать.
React предлагает декларативный подход. Вы описываете, как должен выглядеть интерфейс в зависимости от текущего состояния данных, а React сам решает, какие изменения внести в браузер, чтобы картинка совпала с вашим описанием. Это делает код более предсказуемым и легким для отладки.
Компоненты: Строительные блоки приложения
Фундаментальная концепция React — это компоненты. Представьте, что вы собираете конструктор LEGO. У вас есть кирпичики разных форм и цветов. Из маленьких кирпичиков вы собираете стену, из стен — дом, из домов — город.
В React всё является компонентом. Кнопка, поле ввода, навигационное меню, карточка товара и даже вся страница целиком — это компоненты. Компоненты позволяют разбить сложный интерфейс на независимые, переиспользуемые части, о которых можно думать в изоляции.
!Структура веб-страницы, состоящая из вложенных компонентов.
Функциональные компоненты
В современном React компоненты — это просто JavaScript-функции, которые возвращают то, что должно быть отображено на экране. Взгляните на пример:
Эта функция Welcome является валидным компонентом React. Она не принимает никаких данных и всегда возвращает заголовок с приветствием. Однако, чтобы компоненты были действительно полезными, они должны быть динамичными. Мы поговорим о передаче данных (пропсах) в следующих статьях, а пока сосредоточимся на синтаксисе, который возвращает эта функция.
JSX: JavaScript XML
Вы, вероятно, заметили странный синтаксис в примере выше:
Это не строка и не HTML. Это JSX (JavaScript XML) — синтаксическое расширение для JavaScript. Оно позволяет писать структуру интерфейса так, как если бы это был HTML, прямо внутри JavaScript-кода.
Браузеры не понимают JSX. Перед тем как код попадет в браузер, он должен быть преобразован (транспилирован) в обычный JavaScript с помощью инструментов вроде Babel. Например, приведенный выше код превращается в:
Согласитесь, писать JSX намного удобнее и нагляднее, чем вызывать функции createElement вручную.
Правила написания JSX
Поскольку JSX — это всё же JavaScript, а не HTML, у него есть свои строгие правила:
<div>) или во фрагмент (<>...</>).<br> или <input>, то в JSX обязательно нужно писать <br /> и <input />.class), в JSX используются альтернативные названия в верблюжьем регистре (camelCase). Вместо class мы пишем className, вместо onclick — onClick.Внедрение выражений
Самая мощная возможность JSX — это способность внедрять любые JavaScript-выражения прямо в разметку, используя фигурные скобки {}.
Внутри фигурных скобок можно использовать переменные, вызывать функции или выполнять математические операции.
Virtual DOM: Секрет производительности
Одной из главных проблем веб-разработки является работа с DOM (Document Object Model). DOM — это древовидная структура, представляющая страницу в браузере. Операции с реальным DOM (чтение, запись, перерисовка) являются очень «дорогими» с точки зрения производительности. Если вы будете обновлять весь DOM при каждом изменении данных, ваше приложение будет работать крайне медленно.
React решает эту проблему с помощью концепции Virtual DOM (Виртуальный DOM).
Что такое Virtual DOM?
Virtual DOM — это легковесная копия реального DOM, хранящаяся в памяти в виде обычных JavaScript-объектов. Изменять эти объекты невероятно быстро, так как это не затрагивает браузерный движок рендеринга.
Алгоритм согласования (Reconciliation)
Когда состояние вашего приложения изменяется (например, пользователь нажал кнопку), React запускает процесс обновления:
!Процесс сравнения виртуальных деревьев и точечное обновление реального DOM.
Математика эффективности
Классические алгоритмы сравнения двух деревьев имеют сложность порядка , где — количество элементов в дереве. Это означает, что для отображения 1000 элементов потребовалось бы совершить миллиард сравнений (). Это неприемлемо долго для интерактивных интерфейсов.
React использует эвристический алгоритм со сложностью , где — количество элементов в дереве. Это позволяет обновлять интерфейс практически мгновенно даже при большом количестве элементов.
Где — линейная сложность (время выполнения растет прямо пропорционально количеству элементов), а — кубическая сложность (время выполнения растет катастрофически быстро). Благодаря этому оптимизированному подходу, React способен обрабатывать тысячи компонентов без видимых задержек для пользователя.
Заключение
Мы рассмотрели три кита, на которых стоит React:
* Компоненты позволяют разбивать интерфейс на независимые части. * JSX делает описание интерфейса наглядным и декларативным. * Virtual DOM обеспечивает высокую производительность за счет минимизации обращений к браузеру.
В следующей статье мы углубимся в работу с данными внутри компонентов и узнаем, что такое props и state.