useEventListener()
↔ Custom Hook to Refactor event listeners
export default function useEventListener(eventName, handler, element=window) {
const saveHandler = useRef()
useEffect(() => {
saveHandler.current = handler
}, [handler])
useEffect(() => {
const allow = element && element.addEventListener
if(!allow) return
const eventListner = e => saveHandler.current(e)
element.addEventListener(eventName, eventListener)
return () => element.removeEventListener(eventName, eventListener)
}, [eventName, element])
}