Зачем нужен React

Разбираемся, какую проблему решает React и почему «декларативность» — это не модное слово, а способ писать меньше багов.

React — библиотека для построения пользовательских интерфейсов из переиспользуемых компонентов, где вы описываете каким должен быть UI, а синхронизацией с DOM занимается сама библиотека.

Боль ручного DOM

Представьте счётчик: число на экране и кнопка «плюс». На чистом JavaScript вы пишете так:

let count = 0;
const valueEl = { textContent: "" };      // имитация <span>
function increment() {
  count = count + 1;
  valueEl.textContent = "Счёт: " + count; // вручную синхронизируем DOM
}
increment();
increment();
console.log(valueEl.textContent);

Вывод:

Счёт: 2

Проблема не в одной строке, а в том, что состояние (count) и отображение (textContent) живут отдельно, и связывать их приходится руками. Добавьте ещё пару полей — и таких ручных обновлений станут десятки. Где-то забыли обновить — на экране устаревшие данные. Это классический источник багов.

Декларативный подход

React переворачивает задачу. Вы не пишете «найди элемент и поменяй его текст». Вы описываете: «при таком состоянии экран выглядит вот так». А когда состояние меняется — React сам вычисляет, что именно поменялось в DOM, и обновляет только это.

function Counter() {
  const [count, setCount] = useState(0);
  return (
    <button onClick={() => setCount(count + 1)}>
      Счёт: {count}
    </button>
  );
}

Здесь нет ни querySelector, ни textContent. Есть только описание: «кнопка показывает count, по клику увеличивает его». React гарантирует, что число на экране всегда соответствует значению count. Это и есть декларативность: вы декларируете результат, а не пошаговый рецепт.

Три кита React

ИдеяЧто это даёт
КомпонентыUI собирается из независимых кирпичиков (кнопка, карточка, форма), которые можно переиспользовать и тестировать по отдельности
ДекларативностьВы описываете желаемый вид, синхронизацией с DOM занимается React
РеактивностьМеняется состояние — интерфейс перерисовывается автоматически

Императивно vs декларативно

Аналогия: императивный код — это маршрут «иди прямо, поверни налево, пройди 200 метров». Декларативный — адрес «улица Ленина, 5». В первом случае при любом изменении (перекрыли улицу) маршрут ломается, и его надо переписывать. Во втором — навигатор сам построит путь заново. React — это навигатор для вашего UI.

Что React не делает

React отвечает только за слой представления (View). Он не навязывает роутинг, работу с сервером или управление глобальным состоянием — для этого есть отдельные библиотеки. Это и плюс (гибкость), и минус (нужно собирать экосистему самому). В этом курсе мы разберём ядро, а в конце посмотрим, куда расти.

Итог

  • Ручной DOM заставляет вручную синхронизировать состояние и отображение — отсюда баги.
  • React декларативен: вы описываете UI как функцию от состояния, синхронизацию берёт на себя библиотека.
  • Три кита: компоненты, декларативность, реактивность.
Проверьте себя
1. В чём главное преимущество декларативного подхода React?
AКод выполняется быстрее любого другого
BВы описываете желаемый вид UI, а синхронизацией с DOM занимается React
CReact полностью заменяет HTML и CSS
DНе нужно знать JavaScript
2. Что такое компонент в React?
AГотовый виджет из стандартной библиотеки браузера
BCSS-класс для стилизации
CПереиспользуемый независимый кирпичик интерфейса
DСпособ подключения внешнего скрипта
3. За что из перечисленного React НЕ отвечает «из коробки»?
AПерерисовку UI при изменении состояния
BОписание интерфейса через компоненты
CРоутинг и запросы к серверу
DСинхронизацию состояния с DOM
Поддержать проект