@wojtekmaj/react-hooks
Version:
A collection of React Hooks.
35 lines (29 loc) • 890 B
text/typescript
import { useEffect } from 'react';
import type { DependencyList, EffectCallback } from 'react';
/**
* Runs a given effect after a given delay.
*
* @param {EffectCallback} effect The effect to run
* @param {DependencyList} deps The dependencies to watch
* @param {number} [debounceTime=250] The delay to wait before running the effect
* @returns {void}
*/
export default function useDebouncedEffect(
effect: EffectCallback,
deps: DependencyList,
debounceTime = 250,
): void {
useEffect(() => {
let cleanup: ReturnType<EffectCallback>;
const timeout = setTimeout(() => {
cleanup = effect();
}, debounceTime);
return () => {
clearTimeout(timeout);
if (cleanup) {
cleanup();
}
};
// biome-ignore lint/correctness/useExhaustiveDependencies: Ommitted debounceTime so it is not called every time it changes
}, deps);
}