Введение

Добро пожаловать в мир React! В этой лабораторной работе вы погрузитесь в JSX — фундаментальную часть создания пользовательских интерфейсов с помощью React. JSX (JavaScript XML) — это расширение синтаксиса для JavaScript, которое позволяет писать код, похожий на HTML, непосредственно в ваших JavaScript-файлах. Это делает ваш UI-код более читаемым, выразительным и простым в поддержке.

В ходе этой лабораторной работы вы изучите основные правила JSX, включая:

  • Написание элементов, похожих на HTML.
  • Встраивание динамических JavaScript-выражений.
  • Применение CSS-классов.
  • Использование самозакрывающихся тегов.
  • Группировку нескольких элементов с помощью Fragments.

Базовый проект React уже настроен для вас в директории ~/project/my-app. Давайте начнем!

Напишите элемент JSX, например h1, в return компонента

На этом шаге вы напишете базовый JSX-элемент и увидите его рендеринг в браузере. JSX позволяет писать разметку, очень похожую на HTML, непосредственно внутри ваших React-компонентов.

Сначала давайте запустим среду разработки. Вся ваша работа будет проходить внутри директории ~/project/my-app.

Перейдите в директорию проекта в терминале, установите необходимые зависимости и запустите сервер разработки.

cd ~/project/my-app
npm install

После завершения установки выполните следующую команду для запуска сервера разработки:

npm run dev -- --host 0.0.0.0 --port 8080

Вы увидите вывод, указывающий, что сервер запущен. Теперь нажмите на вкладку Web 8080 в верхней части экрана, чтобы увидеть ваше работающее приложение. Там должно отображаться "Hello, React!".

Далее откройте файл src/App.jsx из файлового проводника слева. Этот файл содержит простой React-компонент с именем App.

Давайте изменим элемент h1. Измените текст внутри тега <h1> на "Welcome to JSX".

Замените содержимое src/App.jsx следующим кодом:

import "./App.css";

function App() {
  return <h1>Welcome to JSX</h1>;
}

export default App;

Сохраните файл (Ctrl+S или Cmd+S). Приложение на вкладке Web 8080 автоматически обновится, отображая новый текст.

Встраивайте выражения JavaScript в фигурные скобки

На этом шаге вы научитесь встраивать JavaScript-выражения непосредственно в ваш JSX, используя фигурные скобки {}. Это мощная функция, позволяющая отображать динамический контент.

Вы можете поместить любое допустимое JavaScript-выражение внутрь фигурных скобок. Это может быть переменная, вызов функции или арифметическая операция.

Давайте изменим компонент App, чтобы отобразить динамический заголовок. Снова откройте файл src/App.jsx.

Внутри функции App, перед оператором return, объявите JavaScript-константу с именем title и присвойте ей строковое значение. Затем используйте эту константу внутри элемента <h1>.

Обновите ваш файл src/App.jsx следующим кодом:

import "./App.css";

function App() {
  const title = "React JSX Basics";

  return <h1>{title}</h1>;
}

export default App;

Сохраните файл. Теперь проверьте вкладку Web 8080. Вы увидите, что заголовок был изменен на "React JSX Basics". React вычисляет выражение {title} и отображает его значение как содержимое тега <h1>.

Добавьте атрибут className для CSS класса

На этом шаге вы узнаете, как добавлять CSS-классы к вашим JSX-элементам для стилизации.

В обычном HTML вы используете атрибут class для присвоения CSS-класса. Однако class является зарезервированным ключевым словом в JavaScript. Чтобы избежать конфликтов, JSX использует className вместо него.

Сначала давайте добавим правило стиля. Откройте файл src/App.css и добавьте следующий CSS-код для определения стиля нашего заголовка:

.title-style {
  color: #61dafb;
  text-align: center;
}

Сохраните файл src/App.css.

Теперь давайте применим этот класс к нашему элементу <h1>. Откройте src/App.jsx и добавьте атрибут className к тегу h1.

Обновите ваш файл src/App.jsx следующим образом:

import "./App.css";

function App() {
  const title = "React JSX Basics";

  return <h1 className="title-style">{title}</h1>;
}

export default App;

Сохраните файл и переключитесь на вкладку Web 8080. Теперь вы должны увидеть, что текст заголовка выровнен по центру и окрашен в светло-голубой цвет, в соответствии со стилями, которые вы определили в App.css.

Используйте самозакрывающийся тег для элемента img

На этом шаге вы узнаете, как использовать самозакрывающиеся теги в JSX. В HTML некоторые элементы, такие как <img>, <br> и <input>, являются "пустыми" или "не имеющими содержимого" элементами, что означает, что у них нет закрывающего тега.

В JSX вы должны явно закрывать каждый тег. Для элементов, у которых нет дочерних элементов, вы используете синтаксис самозакрывающегося тега, добавляя прямой слеш / перед закрывающей угловой скобкой, например <img />.

Компонент React может возвращать только один корневой элемент. Чтобы отобразить несколько элементов, вы должны обернуть их в контейнер, например <div>.

Давайте добавим изображение под нашим заголовком. Мы обернем как <h1>, так и новый тег <img> внутри <div>.

Обновите ваш файл src/App.jsx следующим кодом:

import "./App.css";

function App() {
  const title = "React JSX Basics";
  const imageUrl = "https://labex.io/_ipx/s_98x30/labex-logo-light.svg";

  return (
    <div>
      <h1 className="title-style">{title}</h1>
      <img src={imageUrl} alt="LabEx Logo" width="200" />
    </div>
  );
}

export default App;

В этом коде мы добавили тег <img>. Обратите внимание, что он самозакрывающийся (/>). Мы также использовали фигурные скобки для динамического задания атрибута src из переменной imageUrl.

Сохраните файл и посмотрите на вкладку Web 8080. Вы увидите логотип LabEx, отображаемый под заголовком.

Отображение нескольких элементов во фрагменте <> </>

На этом шаге вы узнаете лучший способ группировки нескольких элементов без добавления лишнего узла в DOM: React Fragments (Фрагменты React).

В предыдущем шаге мы использовали <div> для обертывания наших элементов <h1> и <img>, потому что компонент должен возвращать один корневой элемент. Однако иногда этот дополнительный <div> является ненужным и может мешать вашему CSS-макету (например, при использовании Flexbox или Grid).

React предоставляет решение под названием Fragments. Фрагмент позволяет группировать список дочерних элементов без добавления лишних узлов в DOM. Вы можете использовать сокращенный синтаксис <> ... </>.

Давайте переработаем наш компонент App, чтобы использовать Фрагмент вместо <div>.

Откройте src/App.jsx и замените открывающий <div> и закрывающий </div> на <> и </> соответственно.

Окончательный код вашего src/App.jsx должен выглядеть следующим образом:

import "./App.css";

function App() {
  const title = "React JSX Basics";
  const imageUrl = "https://labex.io/_ipx/s_98x30/labex-logo-light.svg";

  return (
    <>
      <h1 className="title-style">{title}</h1>
      <img src={imageUrl} alt="LabEx Logo" width="200" />
    </>
  );
}

export default App;

Сохраните файл. Визуальный результат на вкладке Web 8080 будет выглядеть идентично предыдущему шагу. Однако, если бы вы проверили HTML в инструментах разработчика вашего браузера, вы бы увидели, что элементы <h1> и <img> теперь являются прямыми соседями, без родительского <div>. Это создает более чистую и эффективную структуру DOM.

Резюме

Поздравляем с завершением лабораторной работы по основам React JSX! Вы освоили основные правила и синтаксис для написания пользовательского интерфейса в приложении React.

В этой лабораторной работе вы практиковались в:

  • Написании элементов, похожих на HTML, таких как <h1>, в операторе return вашего компонента.
  • Встраивании динамических переменных и выражений JavaScript в вашу разметку с использованием фигурных скобок {}.
  • Применении CSS-классов с помощью атрибута className.
  • Использовании самозакрывающихся тегов для элементов, таких как <img>, с синтаксисом />.
  • Группировке нескольких элементов без добавления лишних узлов DOM с использованием React Fragments (<> </>).

Эти концепции являются основой для создания сложных и динамических пользовательских интерфейсов с помощью React. Продолжайте практиковаться, чтобы стать более уверенными в мощи и гибкости JSX.