Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Войти

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

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

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про JavaScript: React, rerender, virtual DOM, state, props, reconciliation

Как работает ререндер в React?

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

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

Ререндер в React — это процесс, когда компонент заново вызывает свою функцию рендеринга для обновления пользовательского интерфейса. Он запускается при изменении состояния компонента (state) или получении новых пропсов (props). React сравнивает результат нового рендера с предыдущим (виртуальный DOM) и вносит минимально необходимые изменения в реальный DOM. Ререндер родительского компонента по умолчанию вызывает ререндер всех его дочерних компонентов.

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

Ререндер (re-render) — это ключевой механизм React для обновления пользовательского интерфейса в ответ на изменения данных. Он не всегда означает прямое манипулирование реальным DOM-деревом браузера, что делает его эффективным.

Что запускает ререндер?

  • Изменение состояния компонента через setState (или useState хук).
  • Изменение пропсов, переданных компоненту от родителя.
  • Изменение контекста (Context), на который подписан компонент.
  • Ререндер родительского компонента (если не предприняты меры по оптимизации).

Процесс ререндера

При запуске ререндера React вызывает функцию рендеринга компонента (render-метод или тело функционального компонента). Эта функция возвращает новое описание UI на основе JSX, которое представляет собой объекты React-элементов (виртуальный DOM). Далее React запускает процесс согласования (reconciliation), сравнивая новое дерево элементов с предыдущим. Он определяет, какие части дерева действительно изменились, и вычисляет минимальный набор операций для обновления реального DOM. Это делает обновления быстрыми, даже если приложение большое.

Пример кода

import { useState } from 'react';

function Counter() {
  const [count, setCount] = useState(0); // Состояние

  // Эта функция запускает ререндер при каждом вызове
  const handleClick = () => {
    setCount(count + 1); // Изменение состояния -> ререндер
  };

  // Этот вызов происходит при каждом ререндере
  console.log('Counter rendered, count:', count);

  return (
    
      You clicked {count} times
      Click me
    
  );
}

// Родительский компонент
function App() {
  const [message, setMessage] = useState('Hello');
  // Изменение message вызовет ререндер App, а затем и Counter,
  // так как Counter — его дочерний компонент.
  return (
    
      
       setMessage('Updated')}>Update Parent
    
  );
}

Оптимизация ререндеров

Чтобы избежать лишних ререндеров и повысить производительность, используют:

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

Итог: Понимание ререндера критически важно для написания производительных React-приложений. Его следует применять осознанно, используя оптимизации для предотвращения ненужных обновлений компонентов, которые не изменились по факту.

Уровень

  • Рейтинг:

    5

  • Сложность:

    4

Навыки

  • JavaScript

    JavaScript

  • React

    React

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

#React

#rerender

#virtual DOM

#state

#props

#reconciliation

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