> Как оптимизировать компонент Child, чтобы он не ререндерился при наборе текста в инпуте (React)

Уровень: senior · Роль: frontend · Категория: Технические вопросы

Компании: Т-Банк

Стек: React

> Пример ответа

Для оптимизации компонента Child и предотвращения его ререндера при вводе текста в инпуте, можно использовать несколько подходов:

  1. React.memo - оберните компонент Child в React.memo, чтобы он перерисовывался только при изменении его пропсов.
JSX
const Child = React.memo(({ data }) => {
console.log('Child render');
return <div>{data}</div>;
});
  1. Вынос состояния инпута в отдельный компонент - чтобы изменения в инпуте не вызывали ререндер родителя, который передаёт пропсы Child.
JSX
function Parent() {
return (
<div>
<InputWrapper />
<Child data="static data" />
</div>
);
}
function InputWrapper() {
const [text, setText] = useState('');
return <input value={text} onChange={(e) => setText(e.target.value)} />;
}
  1. Использование useCallback/useMemo - если Child получает функции или объекты, оберните их в стабильные ссылки, чтобы React.memo корректно работал.
JSX
const handleClick = useCallback(() => {}, []);
const stableData = useMemo(() => ({ key: 'value' }), []);
  1. Разделение контекста - если данные передаются через контекст, разбейте его на части, чтобы изменения в одной части не триггерили ререндер всех потребителей.

Наиболее эффективный вариант - комбинация React.memo и вынос инпута в отдельный компонент, так как это полностью изолирует логику ввода от Child.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью