| 16 | import {useEffectEvent} from './useEffectEvent'; |
| 17 | |
| 18 | export function useEvent<T extends EventTarget, K extends keyof EventMapType<T>>( |
| 19 | ref: RefObject<T | null>, |
| 20 | event: Extract<K, string> | (string & {}), |
| 21 | listener?: (this: T, ev: EventMapType<Exclude<T, null>>[K]) => any, |
| 22 | options?: boolean | AddEventListenerOptions |
| 23 | ): void { |
| 24 | let handleEvent = useEffectEvent(listener); |
| 25 | let isDisabled = listener == null; |
| 26 | |
| 27 | useEffect(() => { |
| 28 | if (isDisabled || ref.current == null) { |
| 29 | return; |
| 30 | } |
| 31 | |
| 32 | return addEvent(ref.current, event, handleEvent, options); |
| 33 | }, [ref, event, options, isDisabled]); |
| 34 | } |