@react-hook/debounce
Version:
A React hook for debouncing setState and other callbacks
1 lines • 3.49 kB
Source Map (JSON)
{"version":3,"file":"index.dev.mjs","sources":["../../src/index.tsx"],"sourcesContent":["import * as React from 'react'\nimport useLatest from '@react-hook/latest'\n\nexport const useDebounceCallback = <CallbackArgs extends any[]>(\n callback: (...args: CallbackArgs) => void,\n wait = 100,\n leading = false\n): ((...args: CallbackArgs) => void) => {\n const storedCallback = useLatest(callback)\n const timeout = React.useRef<ReturnType<typeof setTimeout>>()\n const deps = [wait, leading, storedCallback]\n // Cleans up pending timeouts when the deps change\n React.useEffect(\n () => () => {\n timeout.current && clearTimeout(timeout.current)\n timeout.current = void 0\n },\n deps\n )\n\n return React.useCallback(function () {\n // eslint-disable-next-line prefer-rest-params\n const args = arguments\n const {current} = timeout\n // Calls on leading edge\n if (current === void 0 && leading) {\n timeout.current = setTimeout(() => {\n timeout.current = void 0\n }, wait)\n // eslint-disable-next-line prefer-spread\n return storedCallback.current.apply(null, args as any)\n }\n // Clear the timeout every call and start waiting again\n current && clearTimeout(current)\n // Waits for `wait` before invoking the callback\n timeout.current = setTimeout(() => {\n timeout.current = void 0\n storedCallback.current.apply(null, args as any)\n }, wait)\n }, deps)\n}\n\nexport const useDebounce = <State extends any>(\n initialState: State | (() => State),\n wait?: number,\n leading?: boolean\n): [\n State,\n React.Dispatch<React.SetStateAction<State>>,\n React.Dispatch<React.SetStateAction<State>>\n] => {\n const state = React.useState(initialState)\n return [state[0], useDebounceCallback(state[1], wait, leading), state[1]]\n}\n"],"names":["useDebounceCallback","callback","wait","leading","storedCallback","useLatest","timeout","React","deps","current","clearTimeout","args","arguments","setTimeout","apply","useDebounce","initialState","state"],"mappings":";;;IAGaA,mBAAmB,GAAG,SAAtBA,mBAAsB,CACjCC,QADiC,EAEjCC,IAFiC,EAGjCC,OAHiC,EAIK;AAAA,MAFtCD,IAEsC;AAFtCA,IAAAA,IAEsC,GAF/B,GAE+B;AAAA;;AAAA,MADtCC,OACsC;AADtCA,IAAAA,OACsC,GAD5B,KAC4B;AAAA;;AACtC,MAAMC,cAAc,GAAGC,SAAS,CAACJ,QAAD,CAAhC;AACA,MAAMK,OAAO,GAAGC,MAAA,EAAhB;AACA,MAAMC,IAAI,GAAG,CAACN,IAAD,EAAOC,OAAP,EAAgBC,cAAhB,CAAb,CAHsC;;AAM9B,kBAAM;AACVE,IAAAA,OAAO,CAACG,OAAR,IAAmBC,YAAY,CAACJ,OAAO,CAACG,OAAT,CAA/B;AACAH,IAAAA,OAAO,CAACG,OAAR,GAAkB,KAAK,CAAvB;AACD;;AAJHF,EAAAA,SAAA,CACE,UADF,EAKEC,IALF;;AAciC,mBAAM;AACjCF,IAAAA,OAAO,CAACG,OAAR,GAAkB,KAAK,CAAvB;AACD;;AARL,SAAOF,WAAA,CAAkB,YAAY;AACnC;AACA,QAAMI,IAAI,GAAGC,SAAb;AACA,QAAM;AAACH,MAAAA;AAAD,QAAYH,OAAlB,CAHmC;;AAKnC,QAAIG,OAAO,KAAK,KAAK,CAAjB,IAAsBN,OAA1B,EAAmC;AACjCG,MAAAA,OAAO,CAACG,OAAR,GAAkBI,UAAU,QAEzBX,IAFyB,CAA5B,CADiC;;AAKjC,aAAOE,cAAc,CAACK,OAAf,CAAuBK,KAAvB,CAA6B,IAA7B,EAAmCH,IAAnC,CAAP;AACD,KAXkC;;;AAanCF,IAAAA,OAAO,IAAIC,YAAY,CAACD,OAAD,CAAvB,CAbmC;;AAenCH,IAAAA,OAAO,CAACG,OAAR,GAAkBI,UAAU,CAAC,MAAM;AACjCP,MAAAA,OAAO,CAACG,OAAR,GAAkB,KAAK,CAAvB;AACAL,MAAAA,cAAc,CAACK,OAAf,CAAuBK,KAAvB,CAA6B,IAA7B,EAAmCH,IAAnC;AACD,KAH2B,EAGzBT,IAHyB,CAA5B;AAID,GAnBM,EAmBJM,IAnBI,CAAP;AAoBD;IAEYO,WAAW,GAAG,CACzBC,YADyB,EAEzBd,IAFyB,EAGzBC,OAHyB,KAQtB;AACH,MAAMc,KAAK,GAAGV,QAAA,CAAeS,YAAf,CAAd;AACA,SAAO,CAACC,KAAK,CAAC,CAAD,CAAN,EAAWjB,mBAAmB,CAACiB,KAAK,CAAC,CAAD,CAAN,EAAWf,IAAX,EAAiBC,OAAjB,CAA9B,EAAyDc,KAAK,CAAC,CAAD,CAA9D,CAAP;AACD;;;;"}