1. Введение в экосистему React: JSX, компоненты и пропсы
Введение в экосистему React: JSX, компоненты и пропсы
Добро пожаловать в курс «Основы веб-разработки на ReactJS». Это первая статья, и мы начнем с фундамента, на котором строится вся современная frontend-разработка. Если вы уже знакомы с HTML, CSS и JavaScript, то React станет для вас следующим логическим шагом, который превратит верстку статических страниц в создание динамических приложений.
Что такое React и почему он так популярен?
React — это JavaScript-библиотека для создания пользовательских интерфейсов, разработанная компанией Facebook (ныне Meta). Впервые она была представлена в 2013 году и с тех пор кардинально изменила подход к веб-разработке.
Главная особенность React заключается в том, что он декларативен. В традиционном (императивном) программировании на jQuery или ванильном JS вы часто говорите браузеру, как изменить интерфейс: «найди этот элемент, удали у него класс, добавь текст». В React вы просто описываете, как должен выглядеть интерфейс в зависимости от текущего состояния данных, а React сам решает, как наиболее эффективно обновить DOM (Document Object Model).
> React делает создание интерактивных интерфейсов безболезненным. Создавайте простые представления для каждого состояния вашего приложения, и React будет эффективно обновлять и рендерить только нужные компоненты при изменении данных. Официальная документация React
Ключевые преимущества:
Компонентный подход
Представьте, что вы строите дом из конструктора LEGO. У вас есть кирпичики разного размера, цвета и формы. Вы можете собрать из них стену, из стен — комнату, а из комнат — целый дом. В React всё работает точно так же.
Компонент — это изолированный кусок кода, который отвечает за определенную часть интерфейса. Это может быть кнопка, поле ввода, шапка сайта или целая страница.
!Визуализация того, как страница разбивается на иерархию вложенных компонентов.
Такой подход позволяет: * Переиспользовать код: Создав кнопку один раз, вы можете использовать её везде. * Упростить тестирование: Легче проверить работу одной кнопки, чем всего сайта сразу. * Разделить ответственность: Каждый компонент занят своим делом.
JSX: Синтаксический сахар или магия?
Когда вы впервые видите код на React, он может показаться странным. Вы увидите HTML-теги прямо внутри JavaScript-кода. Этот синтаксис называется JSX (JavaScript XML).
Пример JSX:
На первый взгляд это выглядит как HTML, но это не он. Браузеры не понимают JSX. Перед тем как код попадет в браузер, специальные инструменты (например, Babel) трансформируют его в обычный JavaScript.
Что происходит «под капотом»?
JSX — это просто красивый способ написать вызов функции React.createElement(). Посмотрите на разницу:
Как пишем мы (JSX):
Во что это превращается (JavaScript):
Очевидно, что писать на JSX намного удобнее и привычнее для верстальщиков.
Правила написания JSX
Чтобы JSX работал корректно, нужно соблюдать несколько строгих правил:
Неправильно:
Правильно:
Или используя React Fragment (пустые скобки), чтобы не создавать лишних узлов в DOM:
<input> или <img> можно не закрывать. В JSX это вызовет ошибку. Обязательно пишите <input />, <img />, <br />.class нужно использовать className, а вместо for (в лейблах) — htmlFor. Свойства стилей, состоящие из нескольких слов, также пишутся слитно с большой буквы: tabIndex, onClick.{}.
Создание первого компонента
В современном React компоненты — это просто JavaScript-функции. Они принимают данные (пропсы) и возвращают JSX.
Давайте создадим простой компонент кнопки.
Обратите внимание: название компонента должно начинаться с заглавной буквы. Если вы назовете функцию myButton, React подумает, что это обычный HTML-тег, и ничего не сработает.
Теперь мы можем использовать этот компонент внутри другого компонента (например, главного компонента приложения App):
В этом примере мы дважды использовали компонент MyButton. Это и есть принцип переиспользования.
Пропсы (Props): Передача данных
Компоненты были бы бесполезны, если бы они всегда отображали одно и то же. Чтобы сделать их динамическими, мы используем Props (сокращение от properties — свойства).
Пропсы — это данные, которые родительский компонент передает дочернему. Они похожи на атрибуты в HTML или аргументы функции.
Как передать пропсы?
Представьте, что мы хотим сделать компонент Greeting, который приветствует пользователя по имени.
В родительском компоненте мы передаем данные как атрибуты:
Как принять пропсы?
Дочерний компонент получает пропсы как единственный аргумент функции. Обычно этот аргумент называют props.
В современном JavaScript часто используют деструктуризацию, чтобы сразу извлечь нужные свойства. Это делает код чище:
Важное правило: Пропсы доступны только для чтения
Это один из самых важных принципов React. Компонент никогда не должен изменять свои собственные пропсы.
С точки зрения React, компоненты должны быть «чистыми» функциями относительно своих пропсов. Это значит, что для одних и тех же входных данных они всегда должны возвращать один и тот же результат и ничего не менять во внешнем мире или во входных данных.
Неправильно (мутация пропсов):
Если вам нужно, чтобы данные менялись со временем (например, счетчик кликов или текст в поле ввода), для этого используется State (состояние), о котором мы поговорим в следующих статьях курса.
Вложенность и композиция
Пропсы позволяют передавать не только строки или числа, но и массивы, объекты, функции и даже другие React-компоненты. Особый пропс children позволяет передавать контент, который находится внутри тегов компонента.
Пример компонента-обертки (Card):
Здесь всё, что находится внутри <Card>...</Card>, попадает в пропс children и рендерится внутри div с классом card-style.
Заключение
Сегодня мы заложили первый камень в фундамент вашего понимания React. Мы разобрали:
Эти три концепции покрывают огромную часть того, что вы будете делать как React-разработчик. В следующей статье мы оживим наши компоненты, добавив им интерактивности с помощью State (состояния) и хуков.