UNPKG

throttle-hooks

Version:

Convenient React useDebounce and useThrottle hooks for a clean code.

1 lines 5.27 kB
{"version":3,"file":"index.mjs","sources":["../src/debounce.tsx","../src/throttle.tsx"],"sourcesContent":["import type { AnyFunction } from './types'\nimport { useRef } from 'react'\n\n\nexport default function useDebounce(wait=400, leading=false) {\n const timer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const func = useRef<AnyFunction | null>(null);\n\n const _clearTimer = () => {\n timer.current && clearTimeout(timer.current);\n timer.current = null;\n }\n \n const _setFunction = (newFunction: AnyFunction, scope?: AnyFunction, args?: Array<any>) => {\n\n // Leading (Call on first)\n if (leading === true) {\n func.current = newFunction;\n\n // If timer not active, call.\n if (timer.current === null)\n func.current?.apply(scope, args);\n\n _clearTimer();\n timer.current = setTimeout(() => _clearTimer(), wait);\n }\n // Default (Call on last)\n else{\n _clearTimer();\n\n func.current = newFunction;\n\n timer.current = setTimeout(() => {\n func.current?.apply(scope, args);\n _clearTimer();\n }, wait);\n }\n }\n\n return _setFunction;\n}\n","import type { AnyFunction } from './types'\nimport { useRef, useState } from 'react'\n\n\nexport default function useThrottle(wait=400, leading=false, trailing=false) {\n const timer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const func = useRef<AnyFunction | null>(null);\n const [previous, setPrevious] = useState<number>(0);\n\n const _clearTimer = () => {\n timer.current && clearTimeout(timer.current);\n timer.current = null;\n }\n\n const _later = (scope?: AnyFunction, args?: Array<any>) => {\n setPrevious(leading === false ? 0 : Date.now());\n _clearTimer();\n\n // Call.\n func.current?.apply(scope, args);\n };\n\n const _setFunction = (newFunction: AnyFunction, scope?: AnyFunction, args?: Array<any>) => {\n // Fixate current time.\n const now = Date.now();\n // Set new function.\n func.current = newFunction;\n\n if (!previous && leading === false)\n setPrevious(now);\n\n const remaining = wait - (now - previous);\n\n if (remaining <= 0 || remaining > wait) {\n\n _clearTimer();\n setPrevious(now);\n\n // Call.\n func.current?.apply(scope, args);\n }\n else if (timer.current === null && trailing !== false) {\n timer.current = setTimeout(() => _later(scope, args), remaining);\n }\n }\n\n return _setFunction;\n}\n"],"names":[],"mappings":";;AAIc,SAAU,WAAW,CAAC,IAAQ,EAAE,OAAa,EAAA;AAAvB,IAAA,IAAA,IAAA,KAAA,KAAA,CAAA,EAAA,EAAA,IAAQ,GAAA,GAAA,CAAA;AAAE,IAAA,IAAA,OAAA,KAAA,KAAA,CAAA,EAAA,EAAA,OAAa,GAAA,KAAA,CAAA;AACzD,IAAA,IAAM,KAAK,GAAG,MAAM,CAAuC,IAAI,CAAC;AAChE,IAAA,IAAM,IAAI,GAAG,MAAM,CAAqB,IAAI,CAAC;AAE7C,IAAA,IAAM,WAAW,GAAG,YAAA;QAClB,KAAK,CAAC,OAAO,IAAI,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC;AAC5C,QAAA,KAAK,CAAC,OAAO,GAAG,IAAI;AACtB,KAAC;AAED,IAAA,IAAM,YAAY,GAAG,UAAC,WAAwB,EAAE,KAAmB,EAAE,IAAiB,EAAA;;;AAGpF,QAAA,IAAI,OAAO,KAAK,IAAI,EAAE;AACpB,YAAA,IAAI,CAAC,OAAO,GAAG,WAAW;;AAG1B,YAAA,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI;gBACxB,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC;AAElC,YAAA,WAAW,EAAE;AACb,YAAA,KAAK,CAAC,OAAO,GAAG,UAAU,CAAC,YAAM,EAAA,OAAA,WAAW,EAAE,CAAb,EAAa,EAAE,IAAI,CAAC;;;aAGnD;AACF,YAAA,WAAW,EAAE;AAEb,YAAA,IAAI,CAAC,OAAO,GAAG,WAAW;AAE1B,YAAA,KAAK,CAAC,OAAO,GAAG,UAAU,CAAC,YAAA;;gBACzB,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC;AAChC,gBAAA,WAAW,EAAE;aACd,EAAE,IAAI,CAAC;;AAEZ,KAAC;AAED,IAAA,OAAO,YAAY;AACrB;;ACpCwB,SAAA,WAAW,CAAC,IAAQ,EAAE,OAAa,EAAE,QAAc,EAAA;AAAvC,IAAA,IAAA,IAAA,KAAA,KAAA,CAAA,EAAA,EAAA,IAAQ,GAAA,GAAA,CAAA;AAAE,IAAA,IAAA,OAAA,KAAA,KAAA,CAAA,EAAA,EAAA,OAAa,GAAA,KAAA,CAAA;AAAE,IAAA,IAAA,QAAA,KAAA,KAAA,CAAA,EAAA,EAAA,QAAc,GAAA,KAAA,CAAA;AACzE,IAAA,IAAM,KAAK,GAAG,MAAM,CAAuC,IAAI,CAAC;AAChE,IAAA,IAAM,IAAI,GAAG,MAAM,CAAqB,IAAI,CAAC;IACvC,IAAA,EAAA,GAA0B,QAAQ,CAAS,CAAC,CAAC,EAA5C,QAAQ,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,WAAW,GAAA,EAAA,CAAA,CAAA,CAAuB;AAEnD,IAAA,IAAM,WAAW,GAAG,YAAA;QAClB,KAAK,CAAC,OAAO,IAAI,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC;AAC5C,QAAA,KAAK,CAAC,OAAO,GAAG,IAAI;AACtB,KAAC;AAED,IAAA,IAAM,MAAM,GAAG,UAAC,KAAmB,EAAE,IAAiB,EAAA;;AACpD,QAAA,WAAW,CAAC,OAAO,KAAK,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAC/C,QAAA,WAAW,EAAE;;QAGb,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC;AAClC,KAAC;AAED,IAAA,IAAM,YAAY,GAAG,UAAC,WAAwB,EAAE,KAAmB,EAAE,IAAiB,EAAA;;;AAEpF,QAAA,IAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;;AAEtB,QAAA,IAAI,CAAC,OAAO,GAAG,WAAW;AAE1B,QAAA,IAAI,CAAC,QAAQ,IAAI,OAAO,KAAK,KAAK;YAChC,WAAW,CAAC,GAAG,CAAC;QAElB,IAAM,SAAS,GAAG,IAAI,IAAI,GAAG,GAAG,QAAQ,CAAC;QAEzC,IAAI,SAAS,IAAI,CAAC,IAAI,SAAS,GAAG,IAAI,EAAE;AAEtC,YAAA,WAAW,EAAE;YACb,WAAW,CAAC,GAAG,CAAC;;YAGhB,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC;;aAE7B,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI,IAAI,QAAQ,KAAK,KAAK,EAAE;AACrD,YAAA,KAAK,CAAC,OAAO,GAAG,UAAU,CAAC,YAAA,EAAM,OAAA,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA,EAAA,EAAE,SAAS,CAAC;;AAEpE,KAAC;AAED,IAAA,OAAO,YAAY;AACrB;;;;"}