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 сильнее всего там, где экран живёт после загрузки. Под каждой сферой — инструменты, с которыми он обычно идёт.

  1. 01

    Личные кабинеты

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

    React RouterTanStack Query

  2. 02

    Дашборды и админки

    Таблицы, фильтры, графики и редактирование в одном месте.

    TanStack TableRecharts

  3. 03

    SaaS-продукты

    Когда интерфейс и есть продукт, важнее всего его состояния и скорость разработки.

    Next.jsshadcn/ui

  4. 04

    Telegram Mini Apps

    Приложение внутри мессенджера: каталог, запись, оплата.

    ViteTelegram SDK

  5. 05

    Редакторы и конструкторы

    Перетаскивание, отмена, живой предпросмотр — много состояний, которые меняются одновременно.

    dnd-kitZustand

  6. 06

    Мобильные приложения

    React Native рисует нативные компоненты на iOS и Android из одной кодовой базы.

    React NativeExpo

  7. 07

    Интерактивные блоки на сайтах

    Калькулятор, конфигуратор или корзина островком на обычной серверной странице.

    островкиAstro

  8. 08

    Крупные продукты с публичными страницами

    Серверная отрисовка даёт готовые страницы для поиска, а React держит интерактивную часть.

    Next.jsServer Components

Плюсы и минусы 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

Качественное сравнение четырёх самых распространённых инструментов для интерфейсов.

КритерийReactVueAngularSvelte
Что это библиотека прогрессивный фреймворк полный фреймворк компилятор
Автор Meta Эван Ю и сообщество Google Рич Харрис и сообщество
Вес в браузере средний меньше самый большой самый маленький
Порог входа средний низкий высокий низкий
Готовые решения внутри мало, решает экосистема маршрутизация и состояние от команды всё маршрутизация в 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 и частые ошибки

  1. Эффекты вместо вычислений

    То, что можно вычислить из свойств при отрисовке, не требует useEffect и лишнего состояния.

  2. Один огромный компонент

    Тысяча строк в одном файле перерисовывается целиком и не читается.

  3. Глобальное состояние для всего

    Данным с сервера место в кеше запросов, а не в глобальном хранилище.

  4. Содержание только в браузере

    Публичным страницам нужна серверная отрисовка, иначе поиск и ИИ видят пустую страницу.

  5. Огромные списки без виртуализации

    Десять тысяч строк на экране замораживают любой фреймворк; рисуйте только видимое.

  6. Пакет на каждую мелочь

    Каждая зависимость — это вес и обновление, за которым нужно следить.

8 советов, чтобы React оставался быстрым и понятным

  1. 01

    TypeScript с самого начала

    Типизированные свойства — самая дешёвая документация и первая линия защиты.

  2. 02

    Небольшие компоненты

    Один компонент — одна задача; его проще читать, проверять и переиспользовать.

  3. 03

    Вычислять, а не синхронизировать

    Производные значения считаются при отрисовке, эффекты — для общения с внешним миром.

  4. 04

    Кеш запросов для данных с сервера

    TanStack Query берёт на себя загрузку, ошибки, обновления и кеширование.

  5. 05

    React Compiler

    Он сам добавляет мемоизацию — уберите ручные useMemo и useCallback, где он включён.

  6. 06

    Серверная отрисовка для публичных страниц

    Next.js или островки на серверной странице — чтобы поисковики видели содержание.

  7. 07

    Измеряйте сборку

    Проверяйте, сколько добавляет каждая новая библиотека; тяжёлые экраны грузите только по необходимости.

  8. 08

    Доступность в компонентах

    Настоящие кнопки, подписи и фокус — красивый div с кликом не кнопка.

Как выглядит React: 3 примера

Компонент с состоянием, форма на Actions из React 19 и свой хук. Проверены TypeScript 7 в строгом режиме, отрисованы на сервере и прокликаны в Chromium.

Компонент с состоянием

Типизированные свойства на входе, разметка на выходе; клик меняет состояние, и React перерисовывает цену.

ProductCard.tsx
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

Форма отправляет себя сама, кнопка знает, что запрос идёт, а ответ возвращается состоянием.

SubscribeForm.tsx
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>
  );
}

Свой хук

Переиспользуемая логика со своим состоянием: выбранная тема переживает перезагрузку страницы.

useLocalStorage.tsx
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. Расскажите о задаче — отвечу в течение рабочего дня.

Или пишите на [email protected]