Что сделать, чтобы при дефолтном значении roles = [] массив не создавался заново при каждом рендере?

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

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

Что ответить на собеседовании

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

Подробный разбор

Ответ с пояснениями

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

Для readonly-значения подходит:

const EMPTY_ROLES: readonly string[] = [];
// В компоненте:
// const { roles = EMPTY_ROLES } = props;

Так fallback не получает новую ссылку при каждом рендере. Общую константу нельзя изменять. Если массив является локальным состоянием, используйте ленивую инициализацию useState, а не общий изменяемый объект.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее