Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: React, re-render, profiling, React DevTools, useMemo, React.memo

Какие инструменты и подходы вы используете для поиска компонентов, вызывающих избыточный ре-рендер в React?

Вопрос проверяет знание инструментов и методов профилирования производительности React для выявления и устранения избыточных ре-рендеров.

Короткий ответ

Для поиска избыточных ре-рендеров используют React DevTools Profiler, который показывает, какие компоненты перерисовываются и почему. Также можно использовать console.log или флаги в компонентах. Инструменты вроде Why Did You Render помогают автоматически выявлять ненужные ре-рендеры. Оптимизация включает React.memo, useMemo и useCallback.

Длинный ответ

Инструменты для выявления избыточных ре-рендеров

Основной инструмент — React DevTools Profiler. Он записывает сессию взаимодействия с приложением и показывает, какие компоненты перерисовывались, сколько времени это заняло и какие пропсы или состояние изменились. Это позволяет быстро найти проблемные места.

Практические подходы

  • React.memo — оборачивает компонент, предотвращая ре-рендер, если пропсы не изменились (поверхностное сравнение).
  • useMemo и useCallback — мемоизируют значения и функции, чтобы ссылки на них оставались стабильными между рендерами.
  • Правильная структура состояния — поднимайте состояние только до необходимого уровня, избегайте хранения вычисляемых данных в state.

Пример кода

import React, { useState, useMemo } from 'react';

const ExpensiveComponent = React.memo(({ data }) => {
  console.log('Render ExpensiveComponent');
  return <div>{data}</div>;
});

function App() {
  const [count, setCount] = useState(0);
  const [text, setText] = useState('');

  // Мемоизация, чтобы ссылка не менялась при изменении count
  const memoizedData = useMemo(() => text.toUpperCase(), [text]);

  return (
    <div>
      <button onClick={() => setCount(c => c + 1)}>{count}</button>
      <input value={text} onChange={e => setText(e.target.value)} />
      <ExpensiveComponent data={memoizedData} />
    </div>
  );
}

В этом примере ExpensiveComponent перерисовывается только при изменении text, а не при каждом клике на кнопку, благодаря React.memo и useMemo.

Вывод

Используйте React DevTools Profiler для первичного анализа, а затем применяйте мемоизацию и оптимизацию структуры компонентов. Это особенно полезно в больших приложениях с частыми обновлениями данных, чтобы избежать падения производительности.

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • JavaScript

    JavaScript

  • React

    React

Ключевые слова

#React

#re-render

#profiling

#React DevTools

#useMemo

#React.memo

Подпишись на React Developer в телеграм

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию