27 lines
954 B
TypeScript
27 lines
954 B
TypeScript
"use client";
|
||
|
||
import { useState, useEffect } from 'react';
|
||
|
||
/**
|
||
* Хук для создания дебаунсинга значения
|
||
* @param value Значение, которое нужно дебаунсить
|
||
* @param delay Задержка в миллисекундах (по умолчанию 500мс)
|
||
* @returns Дебаунсированное значение
|
||
*/
|
||
export function useDebounce<T>(value: T, delay: number = 500): T {
|
||
const [debouncedValue, setDebouncedValue] = useState<T>(value);
|
||
|
||
useEffect(() => {
|
||
// Устанавливаем таймер, который обновит значение через delay мс
|
||
const timer = setTimeout(() => {
|
||
setDebouncedValue(value);
|
||
}, delay);
|
||
|
||
// Очищаем таймер при изменении value или при размонтировании
|
||
return () => {
|
||
clearTimeout(timer);
|
||
};
|
||
}, [value, delay]);
|
||
|
||
return debouncedValue;
|
||
}
|