@storm-stack/hooks
Version:
A collection of React hooks used by Storm Software in various client libraries and applications.
32 lines (31 loc) • 796 B
JavaScript
import {
debounce
} from "@storm-stack/utilities/helper-fns/debounce";
import * as React from "react";
export function useDebounce(fn, wait, options = {}, mountArgs = [fn]) {
const dbEffect = React.useRef(null);
React.useEffect(() => {
return () => {
dbEffect.current?.cancel();
};
}, []);
return React.useMemo(() => {
dbEffect.current = debounce(fn, wait, options);
return dbEffect.current;
}, [...mountArgs]);
}
export function useDebounceValue(val, amt = 0) {
const [state, setState] = React.useState(val);
React.useEffect(() => {
const tm = setTimeout(() => {
setState((prev) => {
if (prev === val) return prev;
return val;
});
}, amt);
return () => {
clearTimeout(tm);
};
}, [val]);
return state;
}