Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: React props, object vs primitives, re-rendering, performance optimization, memoization

Что лучше передавать в компонент — объект или примитивы?

Вопрос проверяет понимание принципов оптимизации производительности React-компонентов и правил передачи пропсов.

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

Лучше передавать примитивы, так как они сравниваются по значению и не вызывают лишних ререндеров при использовании React.memo. Объекты при каждом рендере создаются заново, что ломает мемоизацию. Если нужен объект, его следует стабилизировать через useMemo или вынести за пределы компонента.

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

Влияние типа пропсов на ререндеры

В React при каждом обновлении компонента все его дочерние элементы перерендериваются по умолчанию. Для оптимизации используется React.memo, который сравнивает новые и старые пропсы. Примитивы (числа, строки, булевы значения) сравниваются по значению — если значение не изменилось, компонент не перерендерится. Объекты же сравниваются по ссылке, и при каждом рендере родителя создаётся новый объект, даже если его содержимое идентично.

Пример с примитивами

const Child = React.memo(({ count }) => {
  console.log('Child render');
  return {count};
});

function Parent() {
  const [count, setCount] = useState(0);
  return (
    <>
       setCount(c => c + 1)}>+
      
    
  );
}

Здесь Child перерендерится только при изменении count.

Проблема с объектами

const Child = React.memo(({ data }) => {
  console.log('Child render');
  return {data.value};
});

function Parent() {
  const [count, setCount] = useState(0);
  const data = { value: 'test' }; // новый объект каждый рендер
  return (
    <>
       setCount(c => c + 1)}>+
      
    
  );
}

Child будет перерендериваться при каждом клике, даже если data не изменился.

Как правильно передавать объекты

  • Использовать useMemo для стабилизации ссылки:
    const data = useMemo(() => ({ value: 'test' }), []);
  • Вынести объект за пределы компонента, если он статичен:
    const DATA = { value: 'test' };
  • Разделить объект на отдельные примитивные пропсы, если это возможно.

Вывод: для максимальной производительности и предсказуемого поведения мемоизации предпочтительнее передавать примитивы. Если объект необходим, его нужно стабилизировать с помощью useMemo или вынести за пределы компонента.

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

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

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

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • JavaScript

    JavaScript

  • React

    React

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

#React props

#object vs primitives

#re-rendering

#performance optimization

#memoization

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

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

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

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