UNPKG

react-dedup-async

Version:

https://www.npmjs.com/package/react-dedup-async

28 lines (27 loc) 703 B
// index.ts import { useRef } from "react"; function useDedupedAsyncCallback(fn) { const f = useLatestRef(fn); let p = null; let latest; return useRef(function wrapper(...args) { latest = args; return p ? p.then(() => p ?? wrapper(...latest)) : p = f.current(...latest).finally(() => p = null); }).current; } function useDedupedAsyncCallbackIgnoreWhileBusy(fn) { const f = useLatestRef(fn); let p = null; return useRef( (...args) => p ?? (p = f.current(...args).finally(() => p = null)) ).current; } function useLatestRef(value) { const r = useRef(value); r.current = value; return r; } export { useDedupedAsyncCallback, useDedupedAsyncCallbackIgnoreWhileBusy };