useThrottleCallback
hookas/use-throttled-callbackFreeHook
A hook to throttle a callback
Install it
npx shadcn@latest add https://hookas.letstri.dev/r/use-throttled-callback.jsonSource
1'use client'23import * as React from 'react'45export function useThrottledCallback<T extends (...args: any[]) => any>(6 fn: T,7 deps: React.DependencyList,8 delay: number,9): (...args: Parameters<T>) => void {10 const lastExecutedRef = React.useRef(0)11 const timerRef = React.useRef<ReturnType<typeof setTimeout> | null>(null)12 const argsRef = React.useRef<Parameters<T> | null>(null)1314 const throttledFn = React.useCallback(15 (...args: Parameters<T>) => {16 const now = Date.now()17 const remaining = delay - (now - lastExecutedRef.current)1819 argsRef.current = args2021 if (remaining <= 0) {22 if (timerRef.current) {23 clearTimeout(timerRef.current)24 timerRef.current = null25 }26 lastExecutedRef.current = now27 fn(...args)28 }29 else if (!timerRef.current) {30 timerRef.current = setTimeout(() => {31 lastExecutedRef.current = Date.now()32 timerRef.current = null33 if (argsRef.current) {34 fn(...argsRef.current)35 }36 }, remaining)37 }38 },39 [40 fn,41 delay,42 // eslint-disable-next-line react-hooks/exhaustive-deps43 ...deps,44 ],45 )4647 React.useEffect(() => () => {48 if (timerRef.current) {49 clearTimeout(timerRef.current)50 }51 }, [])5253 return throttledFn54}
Files it writes
More from hookas
All 30 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| useAsyncEffectuse-async-effect | hookas | Hooks | Free | no deps | |
| useClickOutsideuse-click-outside | hookas | Hooks | Free | no deps | |
| useDebounceCallbackuse-debounced-callback | hookas | Hooks | Free | no deps | |
| useDebounceMemouse-debounced-memo | hookas | Hooks | Free | no deps | |
| useDebounceStateuse-debounced-state | hookas | Hooks | Free | no deps | |
| useElementSizeuse-element-size | hookas | Hooks | Free | no deps | |
| useFullscreenuse-fullscreen | hookas | Hooks | Free | no deps | |
| useIntervaluse-interval | hookas | Hooks | Free | no deps |
