19 lines
573 B
TypeScript
19 lines
573 B
TypeScript
"use client";
|
|
|
|
import { useEffect, useState } from "react";
|
|
|
|
/**
|
|
* Returns a debounced copy of `value` that only updates after `delayMs`
|
|
* milliseconds of silence. Useful to collapse rapid state changes before
|
|
* triggering expensive side-effects (e.g. API calls).
|
|
*/
|
|
export function useDebouncedValue<T>(value: T, delayMs: number = 300): T {
|
|
const [debounced, setDebounced] = useState(value);
|
|
|
|
useEffect(() => {
|
|
const handle = setTimeout(() => setDebounced(value), delayMs);
|
|
return () => clearTimeout(handle);
|
|
}, [value, delayMs]);
|
|
|
|
return debounced;
|
|
}
|