@modern-kit/react
Version:
23 lines (20 loc) • 770 B
JavaScript
import { debounce } from '@modern-kit/utils';
import { useMemo } from 'react';
import { useUnmount } from '../useUnmount/index.mjs';
import { usePreservedCallback } from '../usePreservedCallback/index.mjs';
function useDebounce(callback, wait, options = {}) {
const callbackAction = usePreservedCallback(callback);
const { signal, leading = false, trailing = true, maxWait } = options ?? {};
const debounced = useMemo(() => {
return debounce(callbackAction, wait, {
signal,
leading,
trailing,
...typeof maxWait === "number" && { maxWait }
});
}, [callbackAction, wait, signal, leading, trailing, maxWait]);
useUnmount(() => debounced.cancel());
return debounced;
}
export { useDebounce };
//# sourceMappingURL=index.mjs.map