Menu

Что такое React? Библиотека JavaScript для интерфейсов

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

На этой странице есть исполняемые редакторы: меняйте, запускайте и сразу видите результат.

React это библиотека JavaScript для построения пользовательских интерфейсов из компонентов. Вы описываете, как должен выглядеть экран для текущих данных, а когда данные меняются, React обновляет страницу под них. React, React JS и ReactJS это одно и то же: библиотека с открытым исходным кодом, созданная в Facebook (теперь Meta).

Нажмите обе кнопки. Каждый Counter хранит своё число, потому что каждый из них это отдельный экземпляр компонента со своим состоянием. Добавьте третью строку, <Counter label="Plums" />, и появится новый независимый счётчик.

Этот короткий пример уже показывает три идеи, на которых построен React: компоненты (Counter и App это функции, которые возвращают UI), JSX (похожий на HTML синтаксис внутри return) и состояние (count, значение, при изменении которого React перерисовывает компонент).

Какую проблему решает React

Пользовательский интерфейс это картинка каких-то данных. Когда данные меняются, картинка тоже должна измениться, и вместе с ней должна измениться каждая часть экрана, которая от этих данных зависит. Без библиотеки вы пишете этот код вручную: находите каждый элемент, затем сами задаёте ему текст, класс или видимость. Каждая новая функция добавляет ещё одно место, которое нужно не забыть обновить.

React переворачивает этот подход. Вы пишете одну функцию, которая говорит, каким должен быть экран при данном состоянии, а React сам выясняет, какие части страницы нужно изменить. Это называется декларативным UI, в противоположность императивному коду, который перечисляет каждое изменение DOM шаг за шагом. Вот оба стиля рядом в одном примере:

ByHand отдаёт свой абзац обычному коду DOM (эффект запускает этот код только после того, как React создал абзац). Он хранит число в переменной, находит каждый элемент через querySelector и вручную задаёт ему текст. Declarative лишь говорит «покажи счёт и покажи, чётный ли он». Удалите в handleClick строку, которая задаёт .parity, и нажмите несколько раз: первая строка теперь утверждает, что 3 чётное, а вторая не может рассинхронизироваться, потому что текст вычисляется из count при каждом рендере.

Как React обновляет страницу

Когда состояние меняется, React снова вызывает функцию вашего компонента. Этот вызов называется рендером. Функция возвращает свежее описание UI, React сравнивает его с предыдущим и затем меняет только те части реальной страницы, которые отличаются. Это описание в памяти часто называют виртуальным DOM.

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

Компоненты, JSX и состояние вкратце

Компоненты это функции JavaScript, имена которых начинаются с заглавной буквы. Они возвращают то, что должно появиться на экране, и вы используете их как теги HTML: <Counter />. Страница это дерево компонентов, от маленьких вроде кнопки до больших вроде целого экрана настроек. См. компоненты.

JSX это синтаксис, который позволяет писать разметку внутри JavaScript. Фигурные скобки возвращают вас в JavaScript, поэтому {count} показывает значение, а {items.map(...)} превращает массив в список. Инструмент сборки компилирует JSX в обычные вызовы функций до того, как браузер его выполнит.

Состояние это данные, которые компонент запоминает между рендерами. Вы создаёте его хуком useState, и вызов его сеттера сообщает React, что что-то изменилось. Данные текут сверху вниз от родителей к детям через пропсы, то есть аргументы компонента.

В этом примере используется всё сразу: список, отрендеренный из массива в состоянии, и форма, которая добавляет в него элементы.

Добавьте задачу, и сразу изменятся две вещи: список и счётчик под ним. Вы ни разу не сказали счётчику обновиться. Оба читают из tasks, поэтому оба следуют за ним. Замените начальный массив на [], и вместо списка появится «Nothing to do.».

Чем React не является

React это библиотека, а не полноценный фреймворк. Он отвечает за компоненты, состояние и их превращение в UI и намеренно оставляет за рамками несколько вещей, нужных готовому приложению:

  • Маршрутизация. Встроенного способа сопоставить URL со страницами нет. Этот пробел заполняют React Router и роутеры фреймворков.
  • Загрузка данных и серверный рендеринг. React даёт инструменты вроде эффектов и Suspense, но не навязывает, откуда берутся данные и как страницы рендерятся на сервере.
  • Настройка сборки. Браузеры не понимают JSX, поэтому нужен инструмент вроде Vite, чтобы его скомпилировать.

Фреймворки строятся на React и добавляют эти части. Next.js и режим фреймворка React Router добавляют маршрутизацию, серверный рендеринг и загрузку данных, и команда React рекомендует начинать полноценное приложение с одного из них. Для клиентского приложения или для обучения Vite с обычным React это небольшая и быстрая отправная точка; см. как установить React.

React и React Native

Сам React только описывает компоненты и то, как они меняются. Отдельный рендерер превращает их в то, что можно увидеть. React DOM рендерит в веб-страницы, и именно его используют все примеры на этом сайте. React Native рендерит такие же компоненты в нативные представления iOS и Android, поэтому вы пишете <View> и <Text> вместо <div> и <p>, и файлов HTML или CSS нет. Компоненты, пропсы, состояние и хуки работают одинаково в обоих, так что всё, что вы узнаете здесь, переносится напрямую.

Когда изучать React

Изучайте React после основ JavaScript, потому что всё в React это JavaScript. Перед началом стоит уверенно владеть:

  • переменными, функциями и стрелочными функциями
  • массивами и их методами map и filter
  • объектами, деструктуризацией и синтаксисом spread (...)
  • import и export
  • промисами и async/await для загрузки данных

Если это знакомо, начните с JSX и компонентов, затем пропсы и состояние. Эффекты, рефы, контекст и инструменты производительности придут позже, когда создание небольших интерактивных компонентов станет привычным.

Часто задаваемые вопросы

Для чего используется React?

React используют для создания интерактивных пользовательских интерфейсов: веб-приложений, дашбордов, форм, одностраничных приложений и частей обычных сайтов. С React Native та же модель компонентов создаёт приложения для iOS и Android.

React это фреймворк или библиотека?

React это библиотека. Он отвечает за компоненты, состояние и рендеринг, но в нём нет встроенного роутера, слоя загрузки данных или настройки сборки. Фреймворки, такие как Next.js и режим фреймворка React Router, добавляют это поверх React.

React JS и React это одно и то же?

Да. React, React JS и ReactJS это три названия одной библиотеки. "JS" в названии потому, что React написан на JavaScript и для JavaScript.

Нужно ли знать JavaScript перед изучением React?

Да. Компоненты React это функции JavaScript, поэтому сначала стоит уверенно владеть функциями, массивами (map, filter), объектами, деструктуризацией, стрелочными функциями, модулями и промисами.

Чем React отличается от React Native?

React описывает интерфейсы как компоненты. React DOM рендерит эти компоненты в веб-страницу, а React Native рендерит их как нативные мобильные представления. Компоненты, пропсы, состояние и хуки работают одинаково в обоих случаях.

Иллюстрация языков программирования Coddy

Учитесь программировать с Coddy

НАЧАТЬ