useDebounce.tsx 452 B

12345678910111213141516171819202122
  1. 'use client'
  2. import { debounce } from 'lodash'
  3. import { useEffect, useMemo, useRef } from 'react'
  4. export const useDebounce = (callback: () => void, delay: number = 1000) => {
  5. const ref = useRef<any | null>(null)
  6. useEffect(() => {
  7. ref.current = callback
  8. }, [callback])
  9. const debouncedCallback = useMemo(() => {
  10. const func = () => {
  11. ref.current?.()
  12. }
  13. return debounce(func, delay)
  14. }, [])
  15. return debouncedCallback
  16. }