toto10's picture
fb1ffd4d2aea1b996230b8c8528d58e19308ce05ffb2f5c4d89d42fa73455684
fea727b
raw
history blame
573 Bytes
// https://github.com/Volune/use-event-callback/blob/master/src/index.ts
import { useLayoutEffect, useMemo, useRef } from 'react'
type Fn<ARGS extends any[], R> = (...args: ARGS) => R
const useEventCallback = <A extends any[], R>(fn: Fn<A, R>): Fn<A, R> => {
const ref = useRef<Fn<A, R>>(fn)
useLayoutEffect(() => {
ref.current = fn
})
return useMemo(
() =>
(...args: A): R => {
const { current } = ref
return current(...args)
},
[]
)
}
export default useEventCallback