Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: React, useState, initial state, empty array, re-render, reference equality

Чем плох пустой массив как начальное состояние?

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

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

Пустой массив как начальное состояние в React может вызывать лишние ререндеры, потому что каждый раз при вызове функции-инициализатора создается новый массив. Это нарушает ссылочную идентичность и может приводить к бесконечным циклам в useEffect. Лучше использовать null или undefined, а массив создавать только при необходимости.

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

Проблема пустого массива как начального состояния

В React при использовании хука useState начальное значение передается один раз при первом рендере. Если передать пустой массив [], то каждый раз при вызове функции-инициализатора (например, при ленивой инициализации) будет создаваться новый объект массива. Это нарушает принцип ссылочной идентичности: React сравнивает состояния по ссылке, и новый массив всегда считается изменением.

Пример проблемы

const [items, setItems] = useState([]); // Новый массив при каждом рендере

useEffect(() => {
  // Этот эффект будет выполняться при каждом рендере,
  // потому что items каждый раз новая ссылка
  fetchData();
}, [items]); // Зависимость items меняется всегда

В результате эффект срабатывает бесконечно, вызывая лишние запросы или обновления. Это особенно критично в компонентах с частыми ререндерами.

Правильное решение

Используйте null или undefined как начальное состояние, а массив создавайте только при необходимости:

const [items, setItems] = useState(null);

useEffect(() => {
  if (items === null) {
    fetchData().then(data => setItems(data));
  }
}, [items]);

Или используйте ленивую инициализацию с функцией, которая возвращает массив один раз:

const [items, setItems] = useState(() => []); // Вызывается только один раз

Вывод

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

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

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

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

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • JavaScript

    JavaScript

  • React

    React

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

#React

#useState

#initial state

#empty array

#re-render

#reference equality

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

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

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

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