use-debounce.ts 470 B

1234567891011121314151617181920212223
  1. import { useEffect, useState } from 'react'
  2. /**
  3. * @template T
  4. * @param {T} value
  5. * @param {number} delay
  6. * @returns {T}
  7. */
  8. export default function useDebounce<T>(value: T, delay = 0) {
  9. const [debouncedValue, setDebouncedValue] = useState(value)
  10. useEffect(() => {
  11. const timer = window.setTimeout(() => {
  12. setDebouncedValue(value)
  13. }, delay)
  14. return () => {
  15. window.clearTimeout(timer)
  16. }
  17. }, [value, delay])
  18. return debouncedValue
  19. }