> Как правильно реализовать дебаунс в React (React)

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

Компании: Rutube

Стек: React

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

Дебаунс (debounce) в React - это техника, которая откладывает выполнение функции до тех пор, пока не пройдет определенный промежуток времени после последнего вызова. Это полезно для оптимизации обработки событий, таких как ввод текста в поисковую строку или изменение размера окна.

Правильная реализация в React требует учета жизненного цикла компонента и очистки таймеров. Вот пример с использованием хука useDebounce:

JSX
import { 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-запрос с debouncedSearchTerm
console.log('Поиск:', debouncedSearchTerm);
}
}, [debouncedSearchTerm]);
return (
<input
type="text"
value={searchTerm}
onChange={(e) => setSearchTerm(e.target.value)}
placeholder="Введите запрос..."
/>
);
}

Ключевые моменты:

  • Используйте useEffect с очисткой таймера, чтобы избежать утечек памяти.

  • Храните отложенное значение в отдельном состоянии, чтобы не вызывать лишних ререндеров.

  • Для дебаунса колбэков (например, при клике) можно использовать useCallback с аналогичной логикой или библиотеки вроде lodash.debounce, но обязательно оборачивать в useRef для стабильности ссылки.

Такой подход гарантирует, что функция выполнится только после паузы в действиях пользователя, что снижает нагрузку на рендеринг и запросы.

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

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