UNPKG

@modern-kit/react

Version:
1 lines 1.52 kB
{"version":3,"file":"index.mjs","sources":["../../../src/hooks/useCallbackOnce/index.ts"],"sourcesContent":["import { usePreservedCallback } from '../usePreservedCallback';\nimport { useRef } from 'react';\n/**\n * @description 주어진 콜백 함수가 최초 실행 이후 다시 실행되지 않도록 보장하는 커스텀 훅입니다.\n *\n * @template F - 콜백 함수의 타입. 콜백 함수는 인자들을 받을 수 있는 함수여야 합니다.\n * @param {F} callback - 최초 한 번 실행될 콜백 함수.\n *\n * @returns {F} - 최초 한 번만 실행되는 메모이제이션된 콜백 함수.\n *\n * @example\n * const Example = () => {\n * const handleClick = useCallbackOnce(() => {\n * console.log('최초 한번만 실행됩니다.');\n * });\n *\n * return <div onClick={handleClick}>Click me</div>;\n * };\n */\nexport function useCallbackOnce<F extends (...args: any[]) => void>(\n callback: F\n): F {\n const hasExecuted = useRef(false);\n const memoizedCallback = usePreservedCallback((...args: Parameters<F>) => {\n if (hasExecuted.current) return;\n callback(...args);\n hasExecuted.current = true;\n });\n\n return memoizedCallback as F;\n}\n"],"names":[],"mappings":";;;AAmBO,SAAS,gBACd,QAAA,EACG;AACH,EAAA,MAAM,WAAA,GAAc,OAAO,KAAK,CAAA;AAChC,EAAA,MAAM,gBAAA,GAAmB,oBAAA,CAAqB,CAAA,GAAI,IAAA,KAAwB;AACxE,IAAA,IAAI,YAAY,OAAA,EAAS;AACzB,IAAA,QAAA,CAAS,GAAG,IAAI,CAAA;AAChB,IAAA,WAAA,CAAY,OAAA,GAAU,IAAA;AAAA,EACxB,CAAC,CAAA;AAED,EAAA,OAAO,gBAAA;AACT;;;;"}