| | |
| | |
| | import { DependencyList, EffectCallback, useCallback, useEffect, useRef } from 'react'; |
| | import debounce from 'lodash/debounce'; |
| |
|
| | export function useLazyEffect(effect: EffectCallback, deps: DependencyList = [], wait = 300) { |
| | const cleanUp = useRef<void | (() => void)>(); |
| | const effectRef = useRef<EffectCallback>(); |
| | effectRef.current = useCallback(effect, deps); |
| | const lazyEffect = useCallback( |
| | debounce(() => (cleanUp.current = effectRef.current?.()), wait), |
| | [], |
| | ); |
| | useEffect(lazyEffect, deps); |
| | useEffect(() => { |
| | return () => (cleanUp.current instanceof Function ? cleanUp.current() : undefined); |
| | }, []); |
| | } |
| |
|