> Как оптимизировать компонент Child, чтобы он не ререндерился при наборе текста в инпуте (React)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: Т-Банк
Стек: React
> Пример ответа
Для оптимизации компонента Child и предотвращения его ререндера при вводе текста в инпуте, можно использовать несколько подходов:
- React.memo - оберните компонент
ChildвReact.memo, чтобы он перерисовывался только при изменении его пропсов.
JSXconst Child = React.memo(({ data }) => {console.log('Child render');return <div>{data}</div>;});
- Вынос состояния инпута в отдельный компонент - чтобы изменения в инпуте не вызывали ререндер родителя, который передаёт пропсы
Child.
JSXfunction 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)} />;}
- Использование useCallback/useMemo - если
Childполучает функции или объекты, оберните их в стабильные ссылки, чтобыReact.memoкорректно работал.
JSXconst handleClick = useCallback(() => {}, []);const stableData = useMemo(() => ({ key: 'value' }), []);
- Разделение контекста - если данные передаются через контекст, разбейте его на части, чтобы изменения в одной части не триггерили ререндер всех потребителей.
Наиболее эффективный вариант - комбинация React.memo и вынос инпута в отдельный компонент, так как это полностью изолирует логику ввода от Child.
> Похожие задачи по frontend
Как ранняя установка рефов влияет на доступ к ним
Какие альтернативные способы установки фокуса в React без использования useEffect
Какие техники кэширования существуют в React
Почему хуки нельзя вызывать внутри условий и как это связано с жизненным циклом React-компонента
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью