План развития · карта «React»

Индивидуальный план развития: React

Выберите текущий и целевой грейд — останутся темы, которые нужно освоить, с проверяемыми критериями, практическими заданиями и оценкой трудоёмкости. План можно скопировать в документ компании, скачать таблицей или распечатать.

1 этап Старт и JSX

Старт и JSX Основа

Junior
  • Создаёт React-проект на Vite с TypeScript и запускает его
  • Объясняет, почему React перерисовывает интерфейс при изменении состояния

Практика. Создать проект на Vite, сделать в нём счётчик и список с добавлением элементов.

JSX и условный рендеринг Основа

Junior
  • Пишет JSX с выражениями, условным рендерингом и фрагментами
  • Знает ловушку && с нулём и экранирование вставленных строк

Практика. Сверстать карточку заказа в JSX со всеми состояниями — оплачен, не оплачен, с комментарием и без.

События Основа

Junior
  • Обрабатывает события и передаёт колбэки от родителя к дочерним компонентам
  • Объясняет, почему обработчик видит состояние на момент рендера

Практика. Сделать компонент поиска, который сообщает родителю запрос по отправке формы.

2 этап Компоненты, props и state

Компоненты, props и state Основа

Junior
  • Разделяет props и state, поднимает общее состояние в ближайшего родителя
  • Обновляет состояние неизменяемо и через функцию, если оно зависит от предыдущего
  • Использует стабильные ключи в списках

Практика. Сделать список покупок с добавлением, удалением, отметкой и фильтром, разбитый на 4 компонента.

Middle
  • Вычисляет производные значения при рендере вместо дублирующего состояния
  • Объясняет согласование (reconciliation) и роль ключей

Практика. Найти в существующем коде дублирующее и производное состояние и упростить компоненты.

Композиция компонентов Основа

Junior
  • Использует children и слоты для обёрток — модальные окна, карточки, раскладки

Практика. Сделать компонент Card со слотами для заголовка, действий и содержимого.

Middle
  • Строит составные компоненты с общим контекстом
  • Заменяет render props и HOC пользовательскими хуками

Практика. Сделать составной компонент Tabs (Tabs.List, Tabs.Tab, Tabs.Panel) с доступностью.

3 этап Хуки

Хуки Основа

Junior
  • Использует useState и useEffect с правильным массивом зависимостей и очисткой
  • Соблюдает правила хуков и объясняет, почему их нельзя вызывать в условиях

Практика. Сделать компонент с таймером и подпиской на размер окна с корректной очисткой.

Middle
  • Отличает задачи для эффекта от вычислений при рендере и убирает лишние эффекты
  • Использует useReducer для сложного состояния

Практика. Переписать компонент с пятью useEffect, убрав эффекты, которые на самом деле вычисления или обработчики событий.

Refs и работа с DOM Основа

Junior
  • Использует useRef для доступа к DOM и фокуса

Практика. Сделать поле, которое получает фокус при открытии модального окна.

Middle
  • Передаёт ref в дочерние компоненты и открывает методы через useImperativeHandle
  • Интегрирует сторонние библиотеки (карты, графики) через ref и эффекты

Практика. Обернуть стороннюю библиотеку графиков в React-компонент с корректным созданием и уничтожением.

Пользовательские хуки Основа

Middle
  • Выносит повторяющуюся логику в пользовательские хуки со стабильным возвращаемым значением
  • Тестирует хуки через renderHook

Практика. Написать хуки useDebounce, useMediaQuery и useLocalStorage с тестами.

4 этап Рендеринг и производительность React

Рендеринг и производительность React Основа

Middle
  • Объясняет, когда компонент перерисовывается, и находит лишние рендеры в Profiler
  • Применяет memo, useMemo и useCallback там, где это измеримо помогает
  • Использует useTransition и виртуализацию для тяжёлых списков

Практика. Ускорить список на 5000 элементов с фильтром, измерив время рендера до и после.

Senior
  • Объясняет архитектуру Fiber и конкурентный рендеринг на уровне идей

Практика. Подготовить для команды разбор, как работает React Compiler и какая ручная мемоизация становится не нужна.

Suspense и ленивая загрузка Основа

Middle
  • Разделяет код по маршрутам через lazy и Suspense
  • Строит постепенное появление страницы вложенными границами Suspense

Практика. Перевести маршруты приложения на lazy с заглушками и измерить уменьшение начального бандла.

Границы ошибок Основа

Middle
  • Ставит границы ошибок на уровне страниц и виджетов с запасным интерфейсом и отправкой в мониторинг
  • Объясняет, какие ошибки границы не ловят

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

Порталы Полезно знать

Middle
  • Рендерит модальные окна и подсказки через порталы с управлением фокусом
  • Объясняет всплытие событий из портала по дереву React

Практика. Сделать доступное модальное окно на портале с ловушкой фокуса и закрытием по Escape.

5 этап Управление состоянием

Управление состоянием Основа

Middle
  • Разделяет состояние на локальное, глобальное, серверное, в URL и в формах и выбирает инструмент для каждого

Практика. Провести аудит состояния проекта и перенести фильтры в URL, данные сервера — в кэш запросов.

Senior
  • Обосновывает подход к состоянию для большого приложения и правила для команды

Практика. Описать правила работы с состоянием для команды с примерами и антипримерами.

Context Основа

Junior
  • Передаёт тему или пользователя через Context

Практика. Сделать переключатель темы на Context.

Middle
  • Избегает лишних перерисовок — мемоизация значения, разделение контекстов
  • Объясняет, почему Context — не менеджер состояния

Практика. Найти и устранить лишние перерисовки из-за контекста с помощью React DevTools Profiler.

Серверное состояние — TanStack Query Основа

Middle
  • Загружает и изменяет данные через useQuery и useMutation с инвалидацией
  • Делает оптимистичные обновления с откатом при ошибке

Практика. Перевести список заказов на TanStack Query с пагинацией, отменой заказа и оптимистичным обновлением.

Redux Toolkit Альтернатива

Middle
  • Описывает состояние слайсами, читает его селекторами и отлаживает в Redux DevTools
  • Объясняет action, reducer, middleware и почему редьюсер должен быть чистым

Практика. Перенести корзину приложения на Redux Toolkit с селекторами и тестами редьюсеров.

Zustand Альтернатива

Junior
  • Создаёт хранилище Zustand и подписывается на его часть селектором

Практика. Сделать корзину на Zustand с сохранением в localStorage.

6 этап Формы в React

Формы в React Основа

Junior
  • Делает контролируемые и неконтролируемые формы и объясняет разницу

Практика. Сделать форму обратной связи с валидацией на контролируемых полях.

Middle
  • Строит формы на React Hook Form со схемой Zod и доступными ошибками

Практика. Сделать форму оформления заказа на React Hook Form и Zod с зависимыми полями.

7 этап Маршрутизация

Маршрутизация Основа

Junior
  • Настраивает маршруты, параметры и вложенные раскладки в React Router

Практика. Сделать приложение из 4 страниц с вложенной раскладкой и страницей 404.

Middle
  • Загружает данные до показа страницы, защищает маршруты и хранит фильтры в URL

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

8 этап Стили в React

Стили в React Основа

Junior
  • Стилизует компоненты CSS Modules или Tailwind и использует clsx для условных классов

Практика. Перевести стили React-проекта на CSS Modules или Tailwind.

Организация стилей — БЭМ, CSS Modules, Tailwind Основа

Junior
  • Применяет один подход к организации стилей последовательно — БЭМ, CSS Modules или Tailwind

Практика. Перевести стили учебного проекта на CSS Modules или Tailwind без глобальных конфликтов.

Middle
  • Обосновывает выбор подхода к стилям для проекта с учётом SSR и команды
  • Выносит токены дизайна в переменные и поддерживает темы

Практика. Добавить тёмную тему на токенах в CSS-переменных без изменения компонентов.

9 этап Тестирование React

Тестирование React Основа

Junior
  • Тестирует компоненты через Testing Library и user-event

Практика. Покрыть тестами 3 компонента приложения.

Middle
  • Тестирует компоненты с провайдерами и сетью через MSW, хуки — через renderHook

Практика. Сделать общую функцию renderWithProviders и покрыть тестами страницу с загрузкой данных.

Юнит-тесты и тесты компонентов Основа

Junior
  • Пишет юнит-тесты на Vitest для чистых функций
  • Пишет тест компонента через Testing Library, находя элементы по роли и подписи

Практика. Покрыть тестами утилиты и 3 компонента учебного проекта.

Middle
  • Подменяет сеть через MSW и тестирует асинхронное поведение
  • Покрывает тестами ключевые сценарии компонентов, а не детали реализации

Практика. Написать тесты формы оформления заказа с подменой API через MSW — успех, ошибка сервера, валидация.

Сквозные тесты — Playwright Основа

Middle
  • Пишет сквозные тесты ключевых сценариев на Playwright без фиксированных задержек
  • Запускает их в CI с трассировкой упавших тестов

Практика. Покрыть Playwright 3 ключевых сценария (вход, поиск, оформление заказа) и запустить в CI в двух браузерах.

Senior
  • Определяет, какие сценарии покрывать сквозными тестами, и борется с нестабильными тестами

Практика. Провести аудит набора e2e-тестов — убрать дублирующие, починить нестабильные, сократить время прогона.

10 этап React с TypeScript

React с TypeScript Основа

Junior
  • Типизирует props, состояние и события в React-компонентах

Практика. Перевести React-проект на TypeScript в режиме strict.

Middle
  • Пишет дженерик-компоненты и типизирует контекст с проверкой провайдера

Практика. Сделать типизированный дженерик-компонент таблицы с колонками и сортировкой.

11 этап Next.js

Next.js Основа

Middle
  • Строит приложение на App Router — маршруты по файлам, раскладки, загрузка данных на сервере
  • Использует Server Actions для форм

Практика. Сделать на Next.js блог или каталог с серверными компонентами, формой на Server Actions и метаданными для SEO.

Senior
  • Проектирует кэширование и стратегии рендеринга страниц Next.js

Практика. Разобрать и описать поведение кэша Next.js в своём приложении и настроить инвалидацию по событию.

Серверные компоненты Основа

Middle
  • Разделяет серверные и клиентские компоненты и ставит границу "use client" осознанно
  • Объясняет отличие серверных компонентов от SSR

Практика. Перевести страницу с загрузкой данных в useEffect на серверный компонент и сравнить объём JS на клиенте.

Серверный рендеринг и мета-фреймворки Основа

Middle
  • Объясняет CSR, SSR, SSG, ISR и гидратацию и выбирает стратегию для страницы
  • Исправляет ошибки гидратации

Практика. Сделать на Next.js сайт, где лендинг статический, каталог пересобирается по времени, а личный кабинет рендерится на клиенте.

Senior
  • Проектирует рендеринг продукта — какие страницы как рендерятся, кэширование и нагрузка на сервер

Практика. Описать стратегию рендеринга и кэширования для интернет-магазина с оценкой нагрузки на сервер.

12 этап React Native

React Native Полезно знать

Middle
  • Создаёт мобильное приложение на Expo с навигацией и нативными компонентами
  • Объясняет отличия от веба — стили, раскладка, жизненный цикл

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

← Карта «React»

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования