React: полный обзор, плюсы, минусы и пределы
Для чего нужен React и где он окупается: 8 сфер, плюсы и минусы, сравнение с Vue, Angular и Svelte, экосистема, React 19, примеры кода, пределы и советы.
Коротко
React — бесплатная библиотека JavaScript для создания интерфейсов из компонентов: экран описывается как функция от данных, а React сам обновляет страницу, когда данные меняются. Созданная в Meta в 2013 году, это самый распространённый инструмент для интерфейсов, которые работают как приложения, — личных кабинетов, дашбордов, SaaS, Telegram Mini Apps, — а через React Native ещё и мобильных приложений. Сильные стороны — компонентная модель, огромная экосистема и рынок разработчиков, зрелые фреймворки вроде Next.js. Цена — вес (около 66 КБ сжатого JavaScript до вашего кода), необходимость самим выбирать маршрутизацию, работу с данными и состоянием и SEO, которому нужна серверная отрисовка.
React коротко: паспорт библиотеки
Главные факты одной таблицей: откуда React взялся, как он работает и как развивается.
- Тип
- Библиотека JavaScript для создания пользовательских интерфейсов
- История
- Facebook (ныне Meta), 2013 год; автор — Джордан Уолк
- Развитие
- В 2025 году объявлен переход в React Foundation при Linux Foundation
- Лицензия
- MIT — свободная, в том числе для коммерции
- Идея
- Интерфейс — функция от данных; компоненты, однонаправленный поток данных
- Синтаксис
- JSX — разметка внутри JavaScript или TypeScript
- Свежая версия
- React 19: Actions, серверные компоненты, React Compiler
- Вес
- Около 66 КБ gzip у минимального приложения, собранного Vite, — до вашего кода
- Фреймворки
- Next.js, React Router, Expo для мобильных
- Мобильные
- React Native — нативные приложения для iOS и Android
- Популярность
- Годами в числе самых используемых веб-фреймворков по опросу Stack Overflow
Для чего применяется React: 8 сфер
React сильнее всего там, где экран живёт после загрузки. Под каждой сферой — инструменты, с которыми он обычно идёт.
-
01
Личные кабинеты
Заказы, настройки, документы и уведомления на экранах, которые обновляются без перезагрузки.
-
02
Дашборды и админки
Таблицы, фильтры, графики и редактирование в одном месте.
-
03
SaaS-продукты
Когда интерфейс и есть продукт, важнее всего его состояния и скорость разработки.
-
04
Telegram Mini Apps
Приложение внутри мессенджера: каталог, запись, оплата.
-
05
Редакторы и конструкторы
Перетаскивание, отмена, живой предпросмотр — много состояний, которые меняются одновременно.
-
06
Мобильные приложения
React Native рисует нативные компоненты на iOS и Android из одной кодовой базы.
-
07
Интерактивные блоки на сайтах
Калькулятор, конфигуратор или корзина островком на обычной серверной странице.
-
08
Крупные продукты с публичными страницами
Серверная отрисовка даёт готовые страницы для поиска, а React держит интерактивную часть.
Плюсы и минусы React
React даёт сильную модель для сложных интерфейсов и оставляет многие решения вам. Обе стороны идут от одного выбора.
Плюсы · 8
-
Компоненты
Экран собирается из небольших переиспользуемых частей с понятными входами.
-
Предсказуемые обновления
Изменили данные — React перерисует нужное; никакого ручного жонглирования DOM.
-
Огромная экосистема
Готовые библиотеки для таблиц, форм, графиков, перетаскивания и дизайн-систем.
-
Много разработчиков
Самый большой рынок специалистов среди инструментов для интерфейсов — проект не зависит от одного человека.
-
TypeScript из коробки
Типизированные свойства и хуки ловят ошибки до запуска.
-
Мобильные на тех же знаниях
React Native использует ту же модель для iOS и Android.
-
Зрелые фреймворки
Next.js и React Router дают серверную отрисовку, маршрутизацию и загрузку данных.
-
Оптимизацию делает компилятор
React Compiler сам добавляет мемоизацию вместо ручных
useMemo.
Минусы · 8
-
Вес
Около 66 КБ сжатого JavaScript до вашего кода — заметно на слабых телефонах.
-
Библиотека, а не фреймворк
Маршрутизацию, загрузку данных, формы и состояние выбираете и подключаете сами.
-
SEO требует сервера
Содержание, построенное только в браузере, хуже видят поисковики и ИИ-роботы.
-
Смена парадигм
Классы, потом хуки, потом серверные компоненты — старый код и старые статьи быстро стареют.
-
Ловушки useEffect
Эффекты, синхронизирующие состояние, дают двойные запросы и циклы — самая частая ошибка в React.
-
Цена гидратации
Страница, отрисованная на сервере, всё равно должна «ожить» в браузере, выполнив тот же код.
-
Много зависимостей
Типичный проект тянет сотни пакетов, которые нужно регулярно обновлять.
-
Лишний для контентных сайтов
Сайт, который читают, получает вес и сложность без пользы.
React и другие: сравнение с Vue, Angular и Svelte
Качественное сравнение четырёх самых распространённых инструментов для интерфейсов.
| Критерий | React | Vue | Angular | Svelte |
|---|---|---|---|---|
| Что это | библиотека | прогрессивный фреймворк | полный фреймворк | компилятор |
| Автор | Meta | Эван Ю и сообщество | Рич Харрис и сообщество | |
| Вес в браузере | средний | меньше | самый большой | самый маленький |
| Порог входа | средний | низкий | высокий | низкий |
| Готовые решения внутри | мало, решает экосистема | маршрутизация и состояние от команды | всё | маршрутизация в SvelteKit |
| Серверная отрисовка | Next.js | Nuxt | Angular SSR | SvelteKit |
| Мобильные | React Native | через сторонние инструменты | Ionic | через сторонние инструменты |
| Разработчиков на рынке | больше всего | много | много в корпоративной разработке | меньше |
| Лучше всего для | продуктов, SaaS, мобильных вместе | быстрого старта и средних приложений | крупных корпоративных систем | лёгких и быстрых интерфейсов |
Когда брать React, а когда нет
Двенадцать типичных проектов с вердиктом. Где React не лучший выбор, названа альтернатива.
-
Личный кабинет
Лучший выборМного состояний и живые данные — родная стихия React.
-
Дашборд или админка
Лучший выборГотовые библиотеки для таблиц, фильтров и графиков.
-
SaaS-продукт
Лучший выборИнтерфейс и есть продукт, а команду легко найти.
-
Telegram Mini App
Лучший выборПриложение внутри мессенджера с экранами и оплатой.
-
Редактор или конструктор
Лучший выборСложные состояния, которые меняются одновременно.
-
Веб и мобильное одной командой
Лучший выборReact и React Native делят модель и часть кода.
-
Интернет-магазин
ПодходитСерверные страницы для поиска, React в корзине и оформлении — или Next.js.
-
Калькулятор на сайте
ПодходитОстровком; небольшой можно сделать и без React.
-
Лендинг
Другой языкСерверный HTML: скорость на телефоне решает конверсию.
-
Корпоративный сайт
Другой языкСодержанию и форме фреймворк не нужен.
-
Блог или медиа
Другой языкСтраницы читают: серверный HTML быстрее и понятнее поиску.
-
Виджет на несколько строк
Другой языкЧистый JavaScript или встроенные элементы браузера.
Экосистема React: инструменты для частых задач
Сам React только рисует интерфейс, всё остальное приходит из экосистемы.
| Задача | Инструменты |
|---|---|
| Сборка | Vite |
| Фреймворки | Next.js, React Router, TanStack Start |
| Данные с сервера | TanStack Query, SWR |
| Состояние на клиенте | Zustand, Jotai, Redux Toolkit |
| Формы | React Hook Form, Zod |
| Компоненты и наборы интерфейса | shadcn/ui, Radix, MUI, Mantine |
| Таблицы | TanStack Table, AG Grid |
| Анимация | Motion |
| Стили | CSS Modules, Tailwind |
| Тесты | Vitest, Testing Library, Playwright |
| Мобильные | React Native, Expo |
Пределы React и частые ошибки
-
Эффекты вместо вычислений
То, что можно вычислить из свойств при отрисовке, не требует
useEffectи лишнего состояния. -
Один огромный компонент
Тысяча строк в одном файле перерисовывается целиком и не читается.
-
Глобальное состояние для всего
Данным с сервера место в кеше запросов, а не в глобальном хранилище.
-
Содержание только в браузере
Публичным страницам нужна серверная отрисовка, иначе поиск и ИИ видят пустую страницу.
-
Огромные списки без виртуализации
Десять тысяч строк на экране замораживают любой фреймворк; рисуйте только видимое.
-
Пакет на каждую мелочь
Каждая зависимость — это вес и обновление, за которым нужно следить.
8 советов, чтобы React оставался быстрым и понятным
-
01
TypeScript с самого начала
Типизированные свойства — самая дешёвая документация и первая линия защиты.
-
02
Небольшие компоненты
Один компонент — одна задача; его проще читать, проверять и переиспользовать.
-
03
Вычислять, а не синхронизировать
Производные значения считаются при отрисовке, эффекты — для общения с внешним миром.
-
04
Кеш запросов для данных с сервера
TanStack Query берёт на себя загрузку, ошибки, обновления и кеширование.
-
05
React Compiler
Он сам добавляет мемоизацию — уберите ручные
useMemoиuseCallback, где он включён. -
06
Серверная отрисовка для публичных страниц
Next.js или островки на серверной странице — чтобы поисковики видели содержание.
-
07
Измеряйте сборку
Проверяйте, сколько добавляет каждая новая библиотека; тяжёлые экраны грузите только по необходимости.
-
08
Доступность в компонентах
Настоящие кнопки, подписи и фокус — красивый
divс кликом не кнопка.
Как выглядит React: 3 примера
Компонент с состоянием, форма на Actions из React 19 и свой хук. Проверены TypeScript 7 в строгом режиме, отрисованы на сервере и прокликаны в Chromium.
Компонент с состоянием
Типизированные свойства на входе, разметка на выходе; клик меняет состояние, и React перерисовывает цену.
import { useState } from 'react';
type Product = { id: number; name: string; price: number; inStock: boolean };
// компонент — это функция: на входе свойства, на выходе разметка
export function ProductCard({ product }: { product: Product }) {
const [qty, setQty] = useState(1);
return (
<article className="card">
<h3>{product.name}</h3>
<p>Цена: {product.price * qty}</p>
{product.inStock ? (
<button onClick={() => setQty(qty + 1)}>Добавить ещё ({qty})</button>
) : (
<p>Нет в наличии</p>
)}
</article>
);
}
Форма на Actions из React 19
Форма отправляет себя сама, кнопка знает, что запрос идёт, а ответ возвращается состоянием.
import { useActionState } from 'react';
type State = { ok: boolean; message: string };
// Actions в React 19: форма отправляет себя сама, а состояние запроса возвращается обратно
async function subscribe(_prev: State, form: FormData): Promise<State> {
const email = String(form.get('email') ?? '');
if (!email.includes('@')) return { ok: false, message: 'Проверьте почту' };
// здесь — запрос к вашему серверу
return { ok: true, message: 'Готово, спасибо!' };
}
export function SubscribeForm() {
const [state, action, pending] = useActionState(subscribe, { ok: false, message: '' });
return (
<form action={action}>
<input name="email" type="email" placeholder="[email protected]" required />
<button disabled={pending}>{pending ? 'Отправляем…' : 'Подписаться'}</button>
{state.message && <p role="status">{state.message}</p>}
</form>
);
}
Свой хук
Переиспользуемая логика со своим состоянием: выбранная тема переживает перезагрузку страницы.
import { useEffect, useState } from 'react';
// свой хук: переиспользуемая логика со своим состоянием и типом значения
export function useLocalStorage<T>(key: string, initial: T) {
const [value, setValue] = useState<T>(() => {
const saved = typeof window === 'undefined' ? null : localStorage.getItem(key);
return saved === null ? initial : (JSON.parse(saved) as T);
});
useEffect(() => {
localStorage.setItem(key, JSON.stringify(value));
}, [key, value]);
return [value, setValue] as const;
}
// им может пользоваться любой компонент: тема переживает перезагрузку страницы
export function ThemeSwitch() {
const [theme, setTheme] = useLocalStorage<'light' | 'dark'>('theme', 'light');
return (
<button onClick={() => setTheme(theme === 'light' ? 'dark' : 'light')}>
Тема: {theme}
</button>
);
}
Вопросы о React
React — это фреймворк или библиотека?
Библиотека: она рисует интерфейс. Маршрутизация, загрузка данных и серверная отрисовка приходят из фреймворков вроде Next.js или React Router.
Нужен ли сайту React?
Сайту, который читают, — обычно нет; интерфейсу, в котором работают, — обычно да.
React или Vue?
Оба хороши. У React больше экосистема, больше разработчиков и есть React Native; Vue проще на старте, и в нём больше встроено.
Плох ли React для SEO?
Только когда содержание строится в браузере. С серверной отрисовкой страницы приходят готовыми, и поисковики их видят.
Что нового в React 19?
Actions для форм и запросов, серверные компоненты во фреймворках и React Compiler, который сам оптимизирует перерисовки.
Что такое Next.js?
Самый популярный фреймворк для React: серверная отрисовка, маршрутизация и API в одном проекте.
Может ли одна команда сделать веб и мобильное?
Да, на React и React Native — модель и часть кода общие.
Сколько весит React?
Минимальное приложение, собранное Vite, — около 66 КБ в gzip до вашего кода.
Форма
Разработка
на React
Делаю интерфейсы на React с TypeScript там, где экран работает как приложение: личные кабинеты, дашборды, админки и Telegram Mini Apps. Расскажите о задаче — отвечу в течение рабочего дня.