Skip to content

Instantly share code, notes, and snippets.

@0xLDev
Created December 18, 2021 08:25
Show Gist options
  • Save 0xLDev/eaf1e40296587c924e413b0becefc0e6 to your computer and use it in GitHub Desktop.
Save 0xLDev/eaf1e40296587c924e413b0becefc0e6 to your computer and use it in GitHub Desktop.
import { useEffect, useRef } from 'react';
export const useEventListener = (eventName, handler, element = window) => {
const savedHandler = useRef();
useEffect(() => {
savedHandler.current = handler;
}, [handler]);
useEffect(() => {
const isSupported = element && element.addEventListener;
if (!isSupported) {
throw new Error('addEventListener is not supported by ' + element);
}
const eventListener = (event) => {
if (savedHandler.current) {
savedHandler.current(event);
}
};
element.addEventListener(eventName, eventListener);
return () => {
element.removeEventListener(eventName, eventListener);
};
}, [eventName, element]);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment