Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: React, useMemo, React.memo, re-render, reference equality, performance optimization

Почему нежелательно создавать новый массив при каждом рендере, даже если его содержимое не изменяется?

Вопрос проверяет понимание механизма повторного рендеринга в React и оптимизации производительности с помощью useMemo и React.memo.

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

При каждом рендере создается новый объект массива с новой ссылкой в памяти. Если массив передается как пропс дочернему компоненту, то React.memo не сможет предотвратить ререндер, так как сравнение по ссылке покажет изменение. Это приводит к лишним ререндерам и снижению производительности.

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

Проблема создания нового массива при каждом рендере

В React при каждом рендере компонента все переменные, объявленные внутри него, создаются заново. Это касается и массивов, и объектов. Даже если содержимое массива не изменилось, создается новый объект с новой ссылкой в памяти.

Влияние на дочерние компоненты

Если такой массив передается как пропс дочернему компоненту, обернутому в React.memo, то мемоизация не сработает. React.memo сравнивает пропсы поверхностно (shallow comparison), то есть по ссылке. Новая ссылка будет расценена как изменение, и дочерний компонент перерендерится, даже если данные не изменились.

Пример кода

// Плохо: новый массив при каждом рендере
function Parent() {
  const items = ['a', 'b', 'c']; // новая ссылка каждый раз
  return <Child list={items} />;
}

// Хорошо: мемоизация массива
function Parent() {
  const items = useMemo(() => ['a', 'b', 'c'], []);
  return <Child list={items} />;
}

Когда это критично

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

Вывод

Используйте useMemo для стабильных массивов и объектов, которые передаются как пропсы в мемоизированные компоненты. Это предотвращает лишние ререндеры и улучшает производительность приложения.

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

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

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

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • JavaScript

    JavaScript

  • React

    React

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

#React

#useMemo

#React.memo

#re-render

#reference equality

#performance optimization

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

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

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

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