Skip to content

Commit 5ef868e

Browse files
committed
Added ability to pass function with more then 1 parameter to useDebounce, also added useDebouncedValue
1 parent 98a3dc8 commit 5ef868e

File tree

1 file changed

+21
-4
lines changed
  • packages/utils/hooks/useDebounce

1 file changed

+21
-4
lines changed

packages/utils/hooks/useDebounce/index.ts

+21-4
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
'use client'
22

3-
import { useEffect, useRef } from 'react'
3+
import { useEffect, useState, useRef } from 'react'
44

55
import debounce from 'lodash/debounce'
66

7-
const useDebounce = <T extends (params: any) => any>(
8-
functionToDebounce: T,
7+
const useDebounce = <T extends any[], U>(
8+
functionToDebounce: (...params: T) => U,
99
{ debounceTime = 400 } = {},
1010
) => {
1111
const debouncedFuncRef = useRef(debounce(functionToDebounce, debounceTime, { trailing: true }))
@@ -20,4 +20,21 @@ const useDebounce = <T extends (params: any) => any>(
2020
return { debouncedFunction: debouncedFuncRef.current }
2121
}
2222

23-
export default useDebounce
23+
const useDebouncedValue = <T>(value: T, debounceTime: number) => {
24+
const [debouncedValue, setDebouncedValue] = useState(value)
25+
26+
useEffect(() => {
27+
const handler = setTimeout(() => {
28+
setDebouncedValue(value)
29+
}, debounceTime)
30+
31+
return () => {
32+
clearTimeout(handler)
33+
}
34+
}, [value, debounceTime])
35+
36+
return debouncedValue
37+
}
38+
39+
40+
export {useDebounce as default, useDebouncedValue}

0 commit comments

Comments
 (0)