Вопрос проверяет понимание производительности React и того, как объявление функций внутри компонента влияет на перерендеры и мемоизацию.
Когда вы объявляете функцию внутри React-компонента, она создается заново при каждом рендере. Это нормально для простых приложений, но может стать проблемой производительности, если функция передается как пропс в дочерние компоненты, обернутые в React.memo или использующие PureComponent. Каждый раз новая ссылка на функцию будет вызывать перерендер дочернего компонента, даже если его пропсы не изменились.
Если функция не использует пропсы, состояние или другие замыкания из компонента, ее можно и нужно объявить за пределами компонента. Это гарантирует, что ссылка на функцию никогда не изменится, и улучшает читаемость кода. Пример:
// Вынесенная функция — ссылка стабильна
function handleClick() {
console.log('Clicked');
}
function MyComponent() {
return <button onClick={handleClick}>Click</button>;
}Если функция зависит от пропсов или состояния, вынести ее наружу нельзя. В этом случае используйте хук useCallback, чтобы мемоизировать функцию и предотвратить ее пересоздание при ненужных рендерах. Пример:
function MyComponent({ id }) {
const handleClick = useCallback(() => {
console.log(id);
}, [id]);
return <button onClick={handleClick}>Click</button>;
}Выносите функции за пределы компонента, когда это возможно — это улучшает производительность и читаемость. Используйте useCallback только для функций, которые зависят от замыканий и передаются в оптимизированные дочерние компоненты. Не мемоизируйте все подряд, так как это может ухудшить производительность из-за лишних вычислений.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию