React DevTools и Redux DevTools — это браузерные расширения для отладки React-приложений. Они позволяют инспектировать компоненты, отслеживать изменения состояния и анализировать производительность.
Ключевые аспекты
React DevTools — инспекция дерева компонентов, props, state, hooks
Redux DevTools — просмотр actions, состояния store, time-travel debugging
Profiler — анализ производительности, поиск медленных компонентов
Components Tab — редактирование props и state в реальном времени
Основные возможности React DevTools
Просмотр иерархии компонентов
Инспекция props, state, hooks
Поиск компонентов по имени
Highlight обновляющихся компонентов
Профилирование рендеров
Основные возможности Redux DevTools
Просмотр всех dispatched actions
Инспекция текущего состояния store
Time-travel — переход к любому состоянию
Export/Import состояния для отладки
Фильтрация actions по типу
Частые ошибки на собеседованиях
Не знают про Profiler — думают DevTools только для просмотра props
Путают React DevTools и Redux DevTools — это разные инструменты
Не используют time-travel в Redux — мощный инструмент для отладки
Не знают про highlight updates — помогает найти лишние рендеры
Введение и проблематика
Разработка React-приложений требует удобных инструментов для отладки. Без них сложно понять, почему компонент перерендеривается, какие props он получает, и как изменяется состояние приложения.
React DevTools и Redux DevTools — must-have инструменты для любого React-разработчика. Они значительно ускоряют отладку и помогают находить проблемы производительности.
Какие проблемы решают?
Отладка состояния — что происходит с state и props
Поиск багов — почему компонент ведёт себя неожиданно
Оптимизация — какие компоненты рендерятся слишком часто
Понимание потока данных — как данные проходят через приложение
Способы поиска:1. По имени: введите "Button" в поиске2. По регулярке: /^User.*Card$/3. Через инспектор: кликните на элемент на странице
Highlight Updates
Включите "Highlight updates when components render" в настройках React DevTools. Компоненты будут подсвечиваться при каждом рендере — это помогает найти лишние обновления.
Цвета подсветки:
Синий — редкие обновления (нормально)
Зелёный — частые обновления (обратите внимание)
Жёлтый/Красный — очень частые обновления (проблема!)
Profiler
Profiler помогает найти проблемы производительности:
Откройте вкладку Profiler
В React DevTools выберите вкладку "Profiler"
Начните запись
Нажмите кнопку Record (синий круг)
Выполните действия в приложении
Делайте то, что вызывает тормоза
Остановите запись
Нажмите Stop
Анализируйте результаты
Изучите flamegraph и ranked chart
Типы визуализации
Flamegraph показывает иерархию рендеров:
Ширина бара = время рендера
Цвет = относительное время (жёлтый/оранжевый — медленно)
Серые компоненты не рендерились
Что искать в Profiler
text
Проблемы производительности:✗ Компонент рендерится без изменения props/state✗ Список рендерит все элементы при добавлении одного✗ Дорогие вычисления в render✗ Слишком глубокая иерархия обновлений
Time-travel — одна из самых мощных возможностей Redux DevTools. Вы можете "перемотать" приложение к любому предыдущему состоянию и посмотреть, как оно выглядело.
text
Сценарий использования:1. Пользователь сообщает о баге2. Вы воспроизводите действия3. В Redux DevTools видите все actions4. Находите action, после которого возник баг5. Используете Jump/Skip для анализа6. Находите причину проблемы
Фильтрация Actions
jsx
// В настройках Redux DevTools можно фильтровать actions:// - По типу: показать только 'user/*' actions// - Blacklist: скрыть '@@redux-form/*'// - Whitelist: показать только указанные типы
Практические примеры
Отладка неожиданного рендера
❓
Code Example 3: Какая проблема в этом коде вызывает лишние ре-рендеры дочернего компонента? Как её исправить?
jsx
// Компонент рендерится слишком часто// 1. Включите Highlight Updates в React DevTools// 2. Найдите компонент, который мигает при каждом действии// 3. Проверьте его props в Components tab// 4. Найдите prop, который создаётся заново:// ❌ Проблема: новый объект при каждом рендере родителя<Childstyle={{ color:'red' }} /><ChildonClick={() =>handleClick()} />// ✅ Решение: стабильные ссылкиconststyle=useMemo(() => ({ color:'red' }), []);consthandleClickCb=useCallback(() =>handleClick(), []);<Childstyle={style} /><ChildonClick={handleClickCb} />
Отладка Redux состояния
jsx
// Проблема: action отправляется, но UI не обновляется// 1. Откройте Redux DevTools// 2. Найдите ваш action в списке// 3. Проверьте вкладку Diff — что изменилось// 4. Проверьте вкладку State — правильные ли данные// Частые причины:// - Мутация state в reducer (ссылка не изменилась)// - Опечатка в action type// - Selector возвращает старые данные
Горячие клавиши
React DevTools
Клавиша
Действие
Ctrl+F
Поиск компонента
↑↓
Навигация по дереву
→←
Развернуть/свернуть
Ctrl+Click
Инспектировать элемент
Redux DevTools
Клавиша
Действие
Ctrl+H
Скрыть/показать DevTools
Ctrl+J
Jump к выбранному action
Ctrl+⇧+E
Export состояния
Пограничные кейсы
⚠️
В production React DevTools работают, но Profiler может быть отключён. Для профилирования в production нужна специальная сборка.
❓
Code Example 4: Для чего нужна специальная сборка с --profile? Почему обычный production build не подходит для профилирования?
jsx
// Профилирование production-сборки// В package.json:{"scripts": {"build:profile":"react-scripts build --profile" }}
DevTools не показывает компоненты
Причины:
React не в development режиме
Старая версия React (< 16.0)
Конфликт с другими расширениями
Компоненты минифицированы (production)
Плюсы и минусы
Плюсы DevTools
Инструмент
Выгода
React DevTools
Быстрая инспекция props/state
Profiler
Поиск узких мест производительности
Redux DevTools
Time-travel debugging
Highlight Updates
Визуальный поиск лишних рендеров
Ограничения
Проблема
Описание
Performance overhead
DevTools замедляют приложение
Production
Некоторые функции недоступны
Большие state
Медленно работают с огромным состоянием
Вопросы интервьюера
Q: Для чего нужен React DevTools?
Для инспекции React-компонентов: просмотр и редактирование props, state, hooks, профилирование производительности, поиск лишних рендеров.
Q: Что такое time-travel в Redux DevTools?
Возможность "перемотать" приложение к любому предыдущему состоянию. Помогает отлаживать баги, анализируя последовательность actions.
Q: Как найти компоненты, которые рендерятся слишком часто?
Включить "Highlight updates" в React DevTools или использовать Profiler для записи и анализа рендеров.
Q: Работают ли DevTools в production?
React DevTools работают, но с ограничениями. Profiler требует специальной сборки. Redux DevTools обычно отключают в production.