react-custom-hooks icon indicating copy to clipboard operation
react-custom-hooks copied to clipboard

useEventListener

Open FrankChinedu opened this issue 3 years ago • 0 comments

import { useRef, useEffect } from 'react'

interface IEventProps { eventType: keyof GlobalEventHandlersEventMap listener: Function, target: Window | Document, options?: boolean | AddEventListenerOptions | undefined }

const useEventListener = ({ eventType = 'scroll', listener = () => null, target = window, options = undefined }: IEventProps) => { const savedListener = useRef<Function>();

useEffect(() => { savedListener.current = listener; }, [listener]);

useEffect(() => { if (!target?.addEventListener) return;

const eventListener = (event: any) => savedListener?.current?.(event);

target?.addEventListener?.(eventType, eventListener, options);

return () => {
  target?.removeEventListener(eventType, eventListener, options);
};

}, [eventType, target, options]); };

export default useEventListener;

FrankChinedu avatar Aug 02 '22 13:08 FrankChinedu