React · Урок 17

Введение в React

Сайты растут — и «ручками» в DOM всё сложнее управлять. React разбивает интерфейс на компоненты и сам решает, как именно обновить страницу. Это самый востребованный фреймворк 2020-х — самое время познакомиться.

Компоненты и JSX

Компонент — функция, которая возвращает разметку. JSX — этот «JS с разметкой». Внутри одного <ol> легко отрисовать список.

function MenuList({ items }) {
  return (
    <ul>
      {items.map(item => <li key={item.id}>{item.name}</li>)}
    </ul>
  );
}
ℹ️
Внутри фигурных скобок { } в JSX работает обычный JavaScript. key нужен каждому элементу списка — по нему React понимает, что перерисовал только изменившееся.

Props: входные данные компонента

«Пропсы» — аргументы-объект, которые родитель передаёт ребёнку. Один компонент-обёртка, разные карточки.

function Card({ title, text }) {
  return <article className="card">
    <h3>{title}</h3>
    <p>{text}</p>
  </article>;
}

function App() {
  return (
    <div>
      <Card title="HTML" text="Разметка страницы" />
      <Card title="CSS" text="Внешний вид" />
    </div>
  );
}

useState: состояние

Переменная в браузере не сохраняется между перерисовками. useState хранит значение в React и возвращает пару: текущее значение + функция, которая ставит новое и перерисовывает компонент.

import { useState } from "react";

function Counter() {
  const [count, setCount] = useState(0);
  return (
    <button onClick={() => setCount(count + 1)}>
      Нажатий: {count}
    </button>
  );
}
💡
Правильный порядок: компонент — чистый «принтер», состояние — единственный источник изменений. Мутировать count напрямую нельзя — только через setCount.

С чего начать проект

React не таскают вручную — его собирают инструментом:

npm create vite@latest my-app -- --template react
cd my-app
npm install
npm run dev
⚠️
npm create vite спросит про фреймворк — выбирайте React и затем JavaScript (позже можно и TypeScript). Начните не с теории, а с одного компонента из App.jsx.

Паттерн «данные → рендер»

Весь смысл фреймворков в одном предложении: интерфейс — это функция от данных UI = f(data). Поменяли массив — страница обновилась сама. В следующих уроках этот приём вынесем в полноценные проекты.