> Как правильно реализовать дебаунс в React (React)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: Rutube
Стек: React
> Пример ответа
Дебаунс (debounce) в React - это техника, которая откладывает выполнение функции до тех пор, пока не пройдет определенный промежуток времени после последнего вызова. Это полезно для оптимизации обработки событий, таких как ввод текста в поисковую строку или изменение размера окна.
Правильная реализация в React требует учета жизненного цикла компонента и очистки таймеров. Вот пример с использованием хука useDebounce:
JSXimport { useState, useEffect } from 'react';function useDebounce(value, delay) {const [debouncedValue, setDebouncedValue] = useState(value);useEffect(() => {const handler = setTimeout(() => {setDebouncedValue(value);}, delay);// Очистка таймера при изменении value или размонтированииreturn () => clearTimeout(handler);}, [value, delay]);return debouncedValue;}// Использование в компонентеfunction SearchComponent() {const [searchTerm, setSearchTerm] = useState('');const debouncedSearchTerm = useDebounce(searchTerm, 500);useEffect(() => {if (debouncedSearchTerm) {// Выполнить API-запрос с debouncedSearchTermconsole.log('Поиск:', debouncedSearchTerm);}}, [debouncedSearchTerm]);return (<inputtype="text"value={searchTerm}onChange={(e) => setSearchTerm(e.target.value)}placeholder="Введите запрос..."/>);}
Ключевые моменты:
-
Используйте
useEffectс очисткой таймера, чтобы избежать утечек памяти. -
Храните отложенное значение в отдельном состоянии, чтобы не вызывать лишних ререндеров.
-
Для дебаунса колбэков (например, при клике) можно использовать
useCallbackс аналогичной логикой или библиотеки вродеlodash.debounce, но обязательно оборачивать вuseRefдля стабильности ссылки.
Такой подход гарантирует, что функция выполнится только после паузы в действиях пользователя, что снижает нагрузку на рендеринг и запросы.
> Похожие задачи по frontend
Как происходит оптимизация с виртуальным деревом в React
В чем разница между React.Fragment и пустыми скобками в React
Какие стратегии рендеринга бывают в Next.js и их плюсы и минусы
Следишь ли за обновлениями React
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью