frontend/hooks/useDebounce.ts (view raw)
1import {useState, useEffect} from 'react';
2
3// https://github.com/xnimorz/use-debounce
4/**
5 *
6 * @param {*} value Value to debounce
7 * @param {number} delay Debounce time
8 * @return {*}
9 */
10function useDebounce<T extends unknown>(value: T, delay: number) {
11 const [debouncedValue, setDebouncedValue] = useState(value);
12
13 useEffect(() => {
14 const handler = setTimeout(() => {
15 setDebouncedValue(value);
16 }, delay);
17
18 return () => {
19 clearTimeout(handler);
20 };
21 }, [value, delay]);
22
23 return debouncedValue;
24}
25
26export default useDebounce;