useEventListener
Usage
import { useRef, useEffect, RefObject } from 'react';
type EventHandler<T extends Event> = (event: T) => void;
const useEventListener = <T extends Event>(
eventName: string,
handler: EventHandler<T>,
element: RefObject<Element> = document
) => {
const savedHandler = useRef<EventHandler<T>>();
useEffect(() => {
savedHandler.current = handler;
}, [handler]);
useEffect(() => {
const isSupported = element.current && element.current.addEventListener;
if (!isSupported) return;
const eventListener: EventHandler<T> = (event: T) => savedHandler.current?.(event);
element.current.addEventListener(eventName, eventListener);
return () => {
element.current.removeEventListener(eventName, eventListener);
};
}, [eventName, element]);
};
export default useEventListener;Last updated