UNPKG

@modern-kit/react

Version:
1 lines 3.2 kB
{"version":3,"file":"index.cjs","sources":["../../../src/hooks/useManualTimeout/index.ts"],"sourcesContent":["import { useRef, useEffect, useCallback } from 'react';\n\n/**\n * @description 수동으로 타임아웃을 설정하고, 초기화할 수 있는 훅입니다.\n *\n * `useTimeout` 훅과 다르게 초기 자동 실행이 없으며, 명시적으로 타임아웃을 설정해야 합니다.\n * 모든 타임아웃은 해당 훅 언마운트 시 자동으로 초기화됩니다.\n *\n * `useTimeout`은 hooks rule에 따라 중첩 타임아웃 등 복잡한 타임아웃 설정에 적절하지 않습니다.\n * `useManualTimeout`은 병렬/중첩된 타임아웃을 실행하고, 한번에 초기화 해야 될 때 유용합니다.\n *\n * @returns {{\n * set: (callback: () => void, delay: number) => number;\n * clearAll: () => void;\n * }}\n * - set: 타임아웃을 설정하는 함수\n * - clearAll: 모든 타임아웃을 초기화하는 함수\n *\n * @example\n * const { set, clearAll } = useManualTimeout();\n *\n * useEffect(() => {\n * // 병렬 실행\n * set(() => console.log('timeout1'), 1000);\n * set(() => console.log('timeout2'), 2000);\n * }, [set]);\n *\n * @example\n * const { set, clearAll } = useManualTimeout();\n *\n * useEffect(() => {\n * // 중첩 실행\n * set(() => {\n * console.log('timeout1');\n * set(() => {\n * console.log('timeout2');\n * set(() => {\n * console.log('timeout3');\n * }, 1000);\n * }, 2000);\n * }, 3000);\n * }, [set]);\n */\nexport const useManualTimeout = (): {\n set: (callback: () => void, delay: number) => number;\n clearAll: () => void;\n} => {\n const timeoutIds = useRef<number[]>([]);\n\n const clearAll = useCallback(() => {\n for (let i = 0; i < timeoutIds.current.length; i++) {\n clearTimeout(timeoutIds.current[i]);\n }\n timeoutIds.current = [];\n }, []);\n\n const set = useCallback((callback: () => void, delay: number) => {\n const id = window.setTimeout(() => {\n timeoutIds.current = timeoutIds.current.filter(\n (timeoutId) => timeoutId !== id\n );\n callback();\n }, delay);\n\n timeoutIds.current.push(id);\n return id;\n }, []);\n\n useEffect(() => {\n return clearAll;\n }, [clearAll]);\n\n return { set, clearAll };\n};\n"],"names":["useRef","useCallback","useEffect"],"mappings":";;;;AA2CO,MAAM,mBAAmB,MAG3B;AACH,EAAA,MAAM,UAAA,GAAaA,YAAA,CAAiB,EAAE,CAAA;AAEtC,EAAA,MAAM,QAAA,GAAWC,kBAAY,MAAM;AACjC,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,UAAA,CAAW,OAAA,CAAQ,QAAQ,CAAA,EAAA,EAAK;AAClD,MAAA,YAAA,CAAa,UAAA,CAAW,OAAA,CAAQ,CAAC,CAAC,CAAA;AAAA,IACpC;AACA,IAAA,UAAA,CAAW,UAAU,EAAC;AAAA,EACxB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,GAAA,GAAMA,iBAAA,CAAY,CAAC,QAAA,EAAsB,KAAA,KAAkB;AAC/D,IAAA,MAAM,EAAA,GAAK,MAAA,CAAO,UAAA,CAAW,MAAM;AACjC,MAAA,UAAA,CAAW,OAAA,GAAU,WAAW,OAAA,CAAQ,MAAA;AAAA,QACtC,CAAC,cAAc,SAAA,KAAc;AAAA,OAC/B;AACA,MAAA,QAAA,EAAS;AAAA,IACX,GAAG,KAAK,CAAA;AAER,IAAA,UAAA,CAAW,OAAA,CAAQ,KAAK,EAAE,CAAA;AAC1B,IAAA,OAAO,EAAA;AAAA,EACT,CAAA,EAAG,EAAE,CAAA;AAEL,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,OAAO,QAAA;AAAA,EACT,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAA,OAAO,EAAE,KAAK,QAAA,EAAS;AACzB;;;;"}