Проверяет понимание того, как React.memo взаимодействует с анонимными функциями и как это отражается в React DevTools при отладке.
React.memo — это HOC, который мемоизирует результат рендера компонента и предотвращает повторный рендер, если пропсы не изменились. Внутри он создаёт новый компонент, оборачивающий исходный. React DevTools определяет имя компонента по свойству displayName, затем по name функции, а если их нет — показывает Anonymous.
displayName — это самый надёжный способ задать имя.function.name — работает только для именованных функций.Anonymous или Memo(Anonymous).Когда вы пишете React.memo(() => ...), исходная функция анонимна, поэтому её name пустой. Обёртка memo тоже не имеет displayName, и в дереве компонентов вы увидите что-то вроде Anonymous или Memo(Anonymous). Это затрудняет отладку: непонятно, какой именно компонент рендерится.
// Плохо: в DevTools будет Anonymous
const Button = React.memo(() => <button>Click</button>);
// Хорошо: именованная функция
const Button = React.memo(function Button() {
return <button>Click</button>;
});
// Тоже хорошо: явный displayName
const Button = React.memo(() => <button>Click</button>);
Button.displayName = 'Button';
В первом случае DevTools покажет Anonymous, во втором — Button, в третьем — тоже Button. Именование критично при работе с большим деревом компонентов и профилировщиком: без имён сложно понять, какой компонент вызывает лишние рендеры.
displayName.displayName после обёртки, иначе имя потеряется.React.memo не влияет на имя исходной функции — он создаёт новую обёртку.Итог: применяйте displayName или именованные функции для memo-компонентов, чтобы React DevTools и Profiler показывали осмысленные имена и упрощали отладку производительности.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию