UNPKG

@react-hook/debounce

Version:

A React hook for debouncing setState and other callbacks

1 lines 2.61 kB
{"version":3,"file":"index.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","timeout","current","clearTimeout","storedCallback","useLatest","React","deps","args","arguments","setTimeout","apply","useDebounce","initialState","state"],"mappings":"mHAGaA,EAAsB,SACjCC,EACAC,EACAC,gBAQIC,EAAQC,SAAWC,aAAaF,EAAQC,SACxCD,EAAQC,aAAU,eAYhBD,EAAQC,aAAU,WAtBxBH,IAAAA,EAAO,cACPC,IAAAA,EAAU,OAEJI,EAAiBC,EAAUP,GAC3BG,EAAUK,IACVC,EAAO,CAACR,EAAMC,EAASI,UAE7BE,EACE,MAIAC,GAGKD,GAAkB,eAEjBE,EAAOC,WACPP,QAACA,GAAWD,UAEF,IAAZC,GAAsBF,SACxBC,EAAQC,QAAUQ,aAEfX,GAEIK,EAAeF,QAAQS,MAAM,KAAMH,GAG5CN,GAAWC,aAAaD,GAExBD,EAAQC,QAAUQ,WAAW,KAC3BT,EAAQC,aAAU,EAClBE,EAAeF,QAAQS,MAAM,KAAMH,IAClCT,KACFQ,IAGQK,EAAc,CACzBC,EACAd,EACAC,SAMMc,EAAQR,EAAeO,SACtB,CAACC,EAAM,GAAIjB,EAAoBiB,EAAM,GAAIf,EAAMC,GAAUc,EAAM"}