@winglet/react-utils
Version:
React utility library providing custom hooks, higher-order components (HOCs), and utility functions to enhance React application development with improved reusability and functionality
41 lines (37 loc) • 1.21 kB
JavaScript
var react = require('react');
var useHandle = require('./useHandle.cjs');
var useTimeout = require('./useTimeout.cjs');
const useDebounce = (callback, dependencyList, ms, options) => {
const optionsRef = react.useRef({ immediate: options?.immediate ?? true });
const isScheduled = react.useRef(false);
const handleCallback = useHandle.useHandle(callback);
const debouncedCallback = useHandle.useHandle(() => {
if (optionsRef.current.immediate) {
if (isScheduled.current) {
isScheduled.current = false;
handleCallback();
}
}
else
handleCallback();
});
const { isIdle, schedule, cancel } = useTimeout.useTimeout(debouncedCallback, ms);
react.useEffect(() => {
if (optionsRef.current.immediate) {
if (isIdle()) {
handleCallback();
isScheduled.current = false;
}
else
isScheduled.current = true;
}
schedule();
}, dependencyList);
react.useEffect(() => cancel, [cancel]);
return {
isIdle,
cancel,
};
};
exports.useDebounce = useDebounce;
;