28 lines
548 B
TypeScript
28 lines
548 B
TypeScript
import {useCallback, useRef} from 'react'
|
|
|
|
type Cb = () => void
|
|
|
|
export function callOnce() {
|
|
let ran = false
|
|
return function runCallbackOnce(cb: Cb) {
|
|
if (ran) return
|
|
ran = true
|
|
cb()
|
|
}
|
|
}
|
|
|
|
export function useCallOnce(cb: Cb): () => void
|
|
export function useCallOnce(cb?: undefined): (cb: Cb) => void
|
|
export function useCallOnce(cb?: Cb) {
|
|
const ran = useRef(false)
|
|
return useCallback(
|
|
(icb: Cb) => {
|
|
if (ran.current) return
|
|
ran.current = true
|
|
if (icb) icb()
|
|
else if (cb) cb()
|
|
},
|
|
[cb],
|
|
)
|
|
}
|