@modern-kit/react
Version:
1 lines • 2.86 kB
Source Map (JSON)
{"version":3,"file":"index.mjs","sources":["../../../src/hooks/useThrottle/index.ts"],"sourcesContent":["import { useMemo } from 'react';\nimport { throttle } from '@modern-kit/utils';\nimport { useUnmount } from '../useUnmount';\nimport { usePreservedCallback } from '../usePreservedCallback';\n\ntype ThrottleParameters = Parameters<typeof throttle>;\ntype ThrottleReturnType<T extends (...args: any) => any> = ReturnType<\n typeof throttle<T>\n>;\n\n/**\n * @description 주어진 콜백 함수를 지정된 시간 동안 쓰로틀링 처리하여 특정 시간 동안 반복 호출을 방지하는 훅입니다.\n *\n * @param {ThrottleParameters[0]} callback - 쓰로틀링할 콜백 함수입니다.\n * @param {ThrottleParameters[1]} wait - 쓰로틀이 적용될 시간(ms)입니다.\n * @param {ThrottleParameters[2]} [options={}] - 쓰로틀 동작에 영향을 주는 추가 옵션입니다.\n * - `signal` 옵션을 통해 쓰로틀링 된 함수를 중단할 수 있습니다.\n * - `leading` 옵션을 통해 초기 호출을 실행할지 여부를 설정할 수 있습니다.\n * - `trailing` 옵션을 통해 마지막 호출을 실행할지 여부를 설정할 수 있습니다.\n *\n * @returns {ThrottleReturnType<T>} 쓰로틀링 된 함수가 반환됩니다.\n *\n * @example\n * const throttledFunction = useThrottle(callback, 300);\n * throttledFunction(); // 쓰로틀링 된 콜백이 실행됩니다.\n *\n * @example\n * // AbortSignal 사용 예시\n * const controller = new AbortController();\n * controller.abort(); // 쓰로틀링된 함수 호출을 취소합니다.\n *\n * const throttled = useThrottle(callback, 300, { signal: controller.signal });\n * throttled(); // 호출되지 않습니다.\n */\nexport function useThrottle<T extends ThrottleParameters[0]>(\n callback: T,\n wait: ThrottleParameters[1],\n options: ThrottleParameters[2] = {}\n): ThrottleReturnType<T> {\n const callbackAction = usePreservedCallback(callback);\n const { signal, leading = true, trailing = true } = options ?? {};\n\n const throttled = useMemo(() => {\n return throttle(callbackAction, wait, { signal, leading, trailing });\n }, [callbackAction, wait, signal, leading, trailing]);\n\n // 언마운트 시 쓰로틀 된 함수의 보류 중인 호출을 모두 버립니다.\n useUnmount(() => throttled.cancel());\n\n return throttled;\n}\n"],"names":[],"mappings":";;;;;AAkCO,SAAS,WAAA,CACd,QAAA,EACA,IAAA,EACA,OAAA,GAAiC,EAAC,EACX;AACvB,EAAA,MAAM,cAAA,GAAiB,qBAAqB,QAAQ,CAAA;AACpD,EAAA,MAAM,EAAE,QAAQ,OAAA,GAAU,IAAA,EAAM,WAAW,IAAA,EAAK,GAAI,WAAW,EAAC;AAEhE,EAAA,MAAM,SAAA,GAAY,QAAQ,MAAM;AAC9B,IAAA,OAAO,SAAS,cAAA,EAAgB,IAAA,EAAM,EAAE,MAAA,EAAQ,OAAA,EAAS,UAAU,CAAA;AAAA,EACrE,GAAG,CAAC,cAAA,EAAgB,MAAM,MAAA,EAAQ,OAAA,EAAS,QAAQ,CAAC,CAAA;AAGpD,EAAA,UAAA,CAAW,MAAM,SAAA,CAAU,MAAA,EAAQ,CAAA;AAEnC,EAAA,OAAO,SAAA;AACT;;;;"}