Что делает
Строит пользовательские интерфейсы из изолированных компонентов с собственным состоянием — изменение одного компонента не ломает остальные и не вызывает лишних перерисовок.
React — JavaScript-библиотека для создания компонентных пользовательских интерфейсов. Навык №1 в разработке клиентской части: стандарт в связке с TypeScript и Next.js.
React — JavaScript-библиотека с открытым исходным кодом для построения пользовательских интерфейсов из изолированных переиспользуемых компонентов. Разработчики клиентской части применяют React в большинстве коммерческих проектов: в российских вакансиях это самый частый навык разработчика клиентской части.
Ключевая идея React: UI — это функция от данных. Компонент получает входные параметры и возвращает описание интерфейса; при изменении данных React обновляет только изменившиеся части DOM через алгоритм согласования (reconciliation). Экосистема включает React Router для маршрутизации, Zustand и Redux для управления глобальным состоянием, Next.js для серверного рендеринга, React Query для работы с API. TypeScript — стандартный язык для новых React-проектов в коммерческой разработке.
Строит пользовательские интерфейсы из изолированных компонентов с собственным состоянием — изменение одного компонента не ломает остальные и не вызывает лишних перерисовок.
Разработчики интерфейсов в продуктовых и аутсорс-командах для создания SPA, SSR-приложений и сложных UI-систем с общим состоянием и маршрутизацией.
Доминирующая роль — разработчик клиентской части. В большинстве вакансий React спрашивают вместе с TypeScript, всё чаще — с Next.js.
React решает только одну задачу: описание и обновление пользовательского интерфейса. Маршрутизация (React Router), управление состоянием (Zustand, Redux), запросы к API (React Query) — всё это отдельные библиотеки экосистемы. В отличие от Angular, React не накладывает ограничений на структуру приложения, что делает его гибким, но требует осознанного выбора стека.
При каждом обновлении React строит виртуальное дерево компонентов в памяти и сравнивает его с предыдущей версией (diffing). Изменения применяются к реальному DOM точечно — только там, где дерево изменилось. Это позволяет обновлять сложные интерфейсы без полной перерисовки страницы и делает React быстрым при частых изменениях данных.
Хуки — функции, которые добавляют возможности React в функциональные компоненты без использования классов. useState управляет локальным состоянием компонента. useEffect запускает побочные эффекты (запросы к API, подписки) при изменении зависимостей. useContext передаёт данные глубоко в дерево без промежуточных компонентов. Кастомные хуки инкапсулируют повторяющуюся логику.
React превращает описание интерфейса в реальный DOM через несколько шагов. Понимание этого процесса объясняет, почему мутация состояния не работает и зачем нужен key в списках.
Рендеринг компонента
React вызывает функцию компонента с текущими данными и получает JSX — описание того, как должен выглядеть интерфейс.
Построение Virtual DOM
JSX преобразуется в дерево объектов (Virtual DOM) в памяти. Это дешёвая операция — нет взаимодействия с реальным DOM.
Сравнение (Diffing)
React сравнивает новый Virtual DOM с предыдущим. Алгоритм находит минимальное количество изменений для перехода из старого состояния в новое.
Применение изменений (Commit)
Только изменившиеся части реального DOM обновляются. Остальные элементы остаются нетронутыми — это обеспечивает производительность.
React переносится между ролями: Фронтенд-разработчик, Фулстек-разработчик, React-разработчик. В одном треке этот навык может быть основным рабочим инструментом, а в другом - сильным прикладным усилителем основной специализации.
Фронтенд-разработчик держит 82.6% вакансий по навыку.
Ещё 7 ролей используют React
Текущий срез показывает активные вакансии сейчас. Распределение по ролям рассчитано по расширенной исторической выборке, поэтому значения могут быть выше текущего количества активных вакансий.
React ценен не абстрактным знанием инструмента, а повторяющимися рабочими задачами — ниже они разобраны так, как встречаются в реальной работе.
Компонент с локальным состоянием
Счётчик с useState — минимальный пример управления состоянием компонента.
import { useState } from 'react';
export function Counter() {
const [count, setCount] = useState(0);
return (
<div>
<p>Счётчик: {count}</p>
<button onClick={() => setCount(c => c + 1)}>+1</button>
</div>
);
} Запрос к API через useEffect и React Query
Загрузка данных с сервера через React Query — стандарт для работы с API в 2025.
import { useQuery } from '@tanstack/react-query';
export function UserList() {
const { data, isLoading } = useQuery({
queryKey: ['users'],
queryFn: () => fetch('/api/users').then(r => r.json()),
});
if (isLoading) return <p>Загрузка...</p>;
return <ul>{data.map(u => <li key={u.id}>{u.name}</li>)}</ul>;
} Кастомный хук для формы
Инкапсуляция логики формы в кастомный хук — переиспользуемый паттерн.
function useField(initial = '') {
const [value, setValue] = useState(initial);
return {
value,
onChange: (e) => setValue(e.target.value),
reset: () => setValue(initial),
};
}
// Использование:
const email = useField('');
<input {...email} type="email" /> Context API для глобальной темы
Передача темы глубоко в дерево компонентов без промежуточных компонентов.
const ThemeContext = createContext('light');
function App() {
const [theme, setTheme] = useState('light');
return (
<ThemeContext.Provider value={theme}>
<Layout />
</ThemeContext.Provider>
);
}
function Button() {
const theme = useContext(ThemeContext);
return <button className={theme}>Кнопка</button>;
} Оптимизация через useMemo и useCallback
Предотвращение лишних вычислений и ре-рендеров дочерних компонентов.
const sorted = useMemo(
() => [...items].sort((a, b) => a.name.localeCompare(b.name)),
[items]
);
const handleClick = useCallback(
(id) => deleteItem(id),
[deleteItem]
); Типизированный компонент на TypeScript
Компонент с явно типизированными входными параметрами — стандарт коммерческого кода.
interface CardProps {
title: string;
description: string;
onClick: () => void;
}
export function Card({ title, description, onClick }: CardProps) {
return (
<div onClick={onClick}>
<h3>{title}</h3>
<p>{description}</p>
</div>
);
} items.push(newItem) или state.value = x не вызывают ре-рендер — React не видит изменений. Правило: всегда создавать новый объект или массив через spread или map().
Без key React не может эффективно обновить список — он перерисовывает все элементы. Key должен быть уникальным идентификатором из данных (id), не индексом массива.
useEffect без массива зависимостей (или с объектом в зависимостях) запускается на каждый рендер. При каждом вызове он меняет состояние → ещё один рендер → цикл. Решение: следить за зависимостями и примитивными значениями.
«Поднять» состояние в корень приложения удобно, но делает все компоненты зависимыми от глобального дерева и замедляет обновления. Правило: держать состояние как можно ближе к месту использования.
React — самый востребованный навык в разработке интерфейсов на российском рынке. В большинстве вакансий он идёт вместе с JavaScript и TypeScript — это стандартный коммерческий стек 2025 года. Next.js фигурирует в заметной доле вакансий с React: серверный рендеринг перестал быть специализацией и стал ожидаемым навыком Senior-разработчика. Разрыв между Middle и Senior определяется знанием архитектурных паттернов: управление глобальным состоянием, оптимизация ре-рендеров, работа с Suspense и Server Components.
React ценят не за знание термина, а за конкретную пользу в ежедневной работе команды.
Навык редко существует изолированно: он встроен в процессы, инструменты и смежные роли, поэтому спрос держится дольше.
Специалист с React быстрее проверяет гипотезы, решает задачи и меньше зависит от ручной передачи работы между людьми.
React формирует устойчивый спрос внутри своего рабочего сегмента.
React сохраняет устойчивый прикладной спрос на рынке: 403 активных вакансий, #37 по рынку, 5.8% IT-вакансий. Ниже показано число открытых вакансий на конец каждого месяца: это исторический ряд по состоянию на конец месяца, а не текущий срез рынка на сегодня.
#37 по рынку • 5.8% IT-вакансий
-89 вакансий и -14% к предыдущему месяцу.
Зарплата React-разработчика зависит от уровня и архитектурной зрелости: рынок ценит знание экосистемы Next.js, а не только хуков. Разрыв между Middle и Senior заметный — платят за умение проектировать состояние приложения, оптимизировать...
124 вакансий с зарплатой в расширенной зарплатной выборке
Middle → Senior
Senior - основной уровень рынка (51%)
React редко живёт изолированно: чаще всего рынок видит его рядом с JavaScript, TypeScript, REST API. Самая плотная связка сейчас - JavaScript: оба навыка встречаются вместе в 63% вакансий.
Главная связка: JavaScript • 63% вакансий. Показываем общерыночные связки React: не junior-минимум из блока выше, а навыки, которые чаще всего встречаются рядом с ним в одной вакансии.
навыки, которые рынок чаще всего видит рядом в одной вакансии
не базовый минимум, а более сильные комбинации стека
Сейчас на рынке 29 активных junior-вакансий с React. Это 8.3% всех вакансий по навыку, поэтому для старта важнее всего смотреть на реальный объём junior-окна и на стек, который рынок ждёт рядом.
8.3% всех вакансий по навыку • Senior / Junior 6.1x
Вход возможен, но рынок ждёт уже собранный стартовый стек.
Медианная вакансия с React ожидает около 17 навыков в стеке. Это широкий стартовый набор: рынок обычно ищет не один изолированный инструмент, а рабочую комбинацию соседних навыков.
Владение React в резюме демонстрирует, что вы умеете строить современные интерфейсы. На каждом уровне важно показать конкретные проекты и понимание экосистемы.
React применяется в разработке одностраничных приложений, административных панелей, интерактивных форм и любых интерфейсов с динамическим обновлением данных без перезагрузки страницы.
Одностраничные приложения с клиентской маршрутизацией через React Router. Кабинет пользователя, дашборды, CRM — всё, где нужна навигация без перезагрузки страницы.
Next.js добавляет серверный рендеринг и генерацию статических страниц поверх React. Ключевой выбор для SEO-критичных проектов: лендинги, медиа, маркетплейсы с...
Компонентный подход React идеально подходит для построения переиспользуемых UI-библиотек внутри компании. Кнопки, формы, таблицы, модальные окна публикуются как...
React Native позволяет применить React-навык для разработки нативных iOS и Android приложений. Общая логика компонентов и хуков переносится на мобильную платформу с...
React заметен в 3 направлениях рынка с долей выше 5%.
React — основа большинства коммерческих интерфейсов. Разработчик со знанием React и экосистемы строит полноценные продуктовые UI.
Декомпозировать интерфейс на изолированные переиспользуемые компоненты. Управлять потоком данных сверху вниз через параметры компонентов и контекст.
Загружать, кэшировать и синхронизировать данные через React Query. Обрабатывать состояния загрузки, ошибок и обновлений без дополнительного кода.
Анализировать ре-рендеры через React DevTools. Применять useMemo, useCallback и React.memo для предотвращения лишних вычислений.
Типизировать компоненты, хуки и API-ответы на TypeScript. Автоматически генерировать типы из OpenAPI-схемы бэкенда через openapi-typescript.
Выбор библиотеки зависит от задачи, команды и экосистемы проекта.
Vue проще в начале: встроенные директивы, меньше бойлерплейта, понятная документация. React гибче, имеет большую экосистему и доминирует на российском рынке по числу вакансий. Vue предпочтителен для...
Angular — полноценный фреймворк с DI, строгой структурой и встроенными решениями для всего. React — библиотека с гибким стеком по выбору. Angular популярен в корпоративном секторе, React — в...
Svelte компилируется в чистый JS без рантайма — получается меньше кода и выше производительность. React имеет несравнимо большую экосистему и сообщество. Svelte набирает популярность, но коммерческих...
Типовая структура React-проекта на Vite. Разделение по слоям облегчает навигацию и поддержку по мере роста кодовой базы.
Переиспользуемые UI-компоненты без бизнес-логики: кнопки, карточки, модалки.
Кастомные хуки (useAuth, useFetch, useDebounce) — переиспользуемая логика, отделённая от UI.
Компоненты страниц/маршрутов, обычно связанные с роутером (React Router, TanStack Router).
Клиенты для работы с backend — обёртки над fetch/axios, типизированные ответы API.
Глобальное состояние (Redux Toolkit, Zustand, Context) — только для данных, нужных нескольким несвязанным компонентам.
Конфигурация сборки: алиасы путей, плагины, настройки dev-сервера и прокси к backend.
Типизация пропсов, state и API-ответов ловит целый класс ошибок до рантайма. Для новых проектов — стандарт по умолчанию.
Маленькие переиспользуемые компоненты вместо God-компонентов на 500+ строк. Один компонент — одна ответственность.
Выносите повторяющуюся логику (запросы, подписки, таймеры) в собственные хуки вместо копирования между компонентами.
useMemo/useCallback/React.memo — не по умолчанию для каждого компонента, а точечно, после профилирования через React DevTools Profiler.
React.lazy + Suspense для страниц уменьшают начальный bundle и ускоряют первую отрисовку.
React Testing Library + Vitest/Jest: проверяйте, что видит пользователь, а не внутренние детали компонента.
Не тащите всё в глобальный store. State поднимается наверх только когда он реально нужен нескольким компонентам.
Перехватывайте ошибки рендера на уровне секций интерфейса, чтобы одна сломанная часть не обрушивала всё приложение.
Включайте React.StrictMode — он ловит побочные эффекты, устаревшие API и двойные рендеры до продакшена.
React экранирует строки, но dangerouslySetInnerHTML отключает защиту. Санитизируйте HTML через DOMPurify.
Уязвимость в merge-функциях (Object.assign, spread). Проверяйте JSON с сервера.
Если используете куки, настройте CSRF-токен на сервере — React не делает это автоматически.
Подписки (setInterval, event listener) без очистки в return useEffect будут висеть вечно. Всегда возвращайте cleanup-функцию.
API-ключи в .env попадают в бандл и видны в DevTools. Храните реальные ключи только на сервере (Next.js API Route, BFF).
React-проект содержит сотни пакетов в node_modules. Регулярно запускайте npm audit и используйте Dependabot.
Избегайте пользовательских данных в style-пропсах — возможна XSS в старых браузерах.
При загрузке сторонних скриптов/стилей используйте integrity-атрибут для защиты от подмены CDN.
React работает в браузере — или на сервере только для рендеринга HTML (SSR через Next.js). Бизнес-логика, работа с базой данных, аутентификация — это область Node.js, Python или Go, а не React.
Если страница не меняется после загрузки, React добавляет лишнюю сложность. Для полностью статического контента (документации, лендингов) лучше подходит Astro или Hugo с нулевым JS по умолчанию.
React сам по себе не умеет в маршрутизацию между страницами. Для SPA нужен React Router, для серверного рендеринга — Next.js или Remix. Это осознанное архитектурное решение, не упущение.
React управляет локальным состоянием компонента через useState. Глобальное состояние (авторизация, корзина, тема) требует дополнительных решений: Zustand, Redux или React Context с осторожностью.
Перспективы React завязаны не только на текущем спросе, но и на том, как навык встраивается в новые платформы, инструменты и рабочие контуры.
RSC позволяют рендерить компоненты на сервере без отправки JS-кода в браузер. Next.js App Router построен на RSC — это новая архитектурная парадигма, которая меняет способ...
React Compiler автоматически оптимизирует ре-рендеры без ручного useMemo и useCallback. В 2025 году вышел в стабильную версию — позволяет писать React-код без постоянной...
React 18 Concurrent Mode позволяет прерывать рендеринг для приоритетных обновлений. Suspense для Data Fetching даёт декларативный способ отображения состояния загрузки без...
React + TypeScript + React Router + React Query. Регистрация, вход, защищённые маршруты, список данных с пагинацией. Задеплоить на Vercel или Netlify.
Drag-and-drop между колонками через dnd-kit, глобальное состояние через Zustand, TypeScript. Показывает понимание сложного управления состоянием и оптимизации ре-рендеров.
React изучают поэтапно: сначала JavaScript и DOM, затем компоненты и хуки, потом экосистема. Попытка начать с Redux или Next.js без понимания базовых концепций React приводит к поверхностному знанию без понимания «почему». Практика важнее теории: первые компоненты пишутся за день, но понимание управления состоянием и оптимизации ре-рендеров приходит только на реальных задачах. Оптимальный учебный проект — полноценное SPA с аутентификацией, запросами к API и несколькими маршрутами.
JavaScript ES6+
Arrow functions, деструктуризация, spread, Promise, async/await, модули. React без уверенного JS — путь к непониманию хуков и замыканий. Минимум — две...
Компоненты и JSX
Функциональные компоненты, JSX, условный рендеринг, списки с key. Написать первые 5-10 компонентов вручную: кнопку, форму, список, карточку товара.
Хуки useState и useEffect
Локальное состояние компонента. Запросы к API внутри useEffect с зависимостями. Типичная ошибка — бесконечный цикл из-за неправильного массива...
React Router и маршрутизация
Создать SPA с несколькими страницами, динамическими параметрами и вложенными маршрутами. Понять разницу между Link и useNavigate, lazy loading маршрутов.
Соответствие — доля тем навыка, которые охватывает программа курса
React учится через практику — теоретические видео без написания кода не дают результата. Правильный старт: сначала закрепить JavaScript, потом написать первый компонент, потом первое приложение с данными из API.
Убедиться, что понятны: стрелочные функции, деструктуризация, spread-оператор, Promise, async/await, map/filter/reduce, ES-модули. Без этого React останется непонятным.
Создать Counter с useState. Добавить кнопки + и -. Добавить условный рендеринг: показывать предупреждение при значении < 0. Понять цикл: событие → обновление состояния → ре-рендер.
Установить React Query. Создать компонент, который загружает список пользователей из JSONPlaceholder. Добавить обработку загрузки и ошибки. Это основной паттерн любого реального приложения.
Установить React Router v6. Создать три страницы: главную, список и детальную. Добавить навигацию между ними через Link. Понять разницу между useNavigate и Navigate компонентом.
Для React важнее всего быстро перейти к документации и стартовым материалам, а рынок и зарплаты уже помогают понять ценность навыка.
React — библиотека JavaScript, которая помогает строить интерфейсы сайтов и приложений. Вместо ручного изменения HTML через DOM, разработчик описывает, как должен выглядеть интерфейс при разных данных, а React сам обновляет нужные части страницы.
Библиотека. React решает только одну задачу — построение интерфейса. Маршрутизация, запросы к API, управление глобальным состоянием — всё это отдельные библиотеки на выбор разработчика. Angular — фреймворк, Vue — ближе к фреймворку, React — явная библиотека.
Да, обязательно. Без уверенного ES6+ (стрелочные функции, деструктуризация, Promise, async/await, модули) React останется набором магических конструкций без понимания. Минимум — два-три месяца практики JavaScript перед переходом к React.
На российском рынке React встречается примерно втрое чаще Vue по вакансиям. React сложнее, требует осознанного выбора архитектуры, но даёт более гибкий стек. Vue проще в начале и строже структурирован. Для карьеры в России — React предпочтительнее по числу вакансий.
Хуки — функции с префиксом use, которые дают компонентам доступ к возможностям React: useState для локального состояния, useEffect для побочных эффектов, useContext для доступа к глобальным данным. Хуки заменили классовые компоненты и сделали логику переиспользуемой через кастомные хуки.
Зарплата зависит от уровня: разрыв между Middle и Senior определяется архитектурной зрелостью, а не знанием синтаксиса. Знание Next.js и TypeScript в связке с React увеличивает число доступных вакансий и уровень компенсации. Актуальные данные по зарплатам — в рыночном блоке этой страницы.