use-debounce-effect

PreviousNext

A hook to debounce an effect

Docs
hookshook

Preview

Loading preview…
registry/hooks/use-debounce-effect.ts
import { useEffect, useState } from 'react'
import { useDebounceFn } from '@/registry/hooks/use-debounce-fn'
import { useUpdateEffect } from '@/registry/hooks/use-update-effect'
import type { DependencyList, EffectCallback } from 'react'
import type { DebounceOptions } from '@/registry/hooks/use-debounce-fn'

export function useDebounceEffect(
  effect: EffectCallback,
  deps: DependencyList,
  debounceMs?: number,
  options?: DebounceOptions,
) {
  const [flag, setFlag] = useState({})
  const { run } = useDebounceFn(
    () => {
      setFlag({})
    },
    debounceMs,
    options,
  )

  useEffect(() => {
    return run()
  }, deps)

  useUpdateEffect(() => {
    return effect()
  }, [flag])
}

Installation

npx shadcn@latest add @hooks/use-debounce-effect

Usage

import { UseDebounceEffect } from "@/hooks/use-debounce-effect"
const value = UseDebounceEffect()