> Что происходит при инициализации массива в React-компоненте при каждом рендере и почему это плохо? (React)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: Альфа-банк
Стек: React
> Пример ответа
При каждом рендере React-компонента весь его код выполняется заново, включая инициализацию массивов. Если вы пишете, например, const items = [] или const data = new Array(10).fill(0) непосредственно в теле компонента (не внутри хуков), то каждый раз создается новый объект массива в памяти. Это плохо по нескольким причинам:
-
Избыточное потребление памяти и производительность - каждый рендер создает новый массив, старый остается до сборки мусора. При частых ререндерах (например, при вводе текста или анимациях) это может привести к заметным тормозам.
-
Потеря ссылочной стабильности - если массив передается как проп дочернему компоненту или используется в
useEffect/useMemoв качестве зависимости, каждый новый массив будет считаться новым значением (так как ссылки разные). Это вызовет бесконечные ререндеры дочерних компонентов или повторное выполнение эффектов, даже если содержимое массива не изменилось.
Правильные подходы:
-
Для статических данных используйте
useMemo:const items = useMemo(() => [1, 2, 3], []). -
Для динамических массивов, зависящих от состояния, используйте
useMemoс правильными зависимостями. -
Если массив нужен как начальное значение состояния, инициализируйте его через функцию-инициализатор в
useState:const [list, setList] = useState(() => []). -
Для констант выносите массив за пределы компонента:
const OPTIONS = ['a', 'b'].
> Похожие задачи по frontend
Как спроектировать и реализовать rate limiting для платного API с разными тарифами
Как реализовать rate limiting с использованием Redis
Почему для внешних функций не нужен массив зависимостей в useEffect?
Может ли useCallback быть нужен для любого React-компонента или есть особенности?
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью