@react-hook/event
Version:
A React hook for managing event listeners, e.g. removing events when a component unmounts.
37 lines (30 loc) • 1.06 kB
JavaScript
import { useRef, useEffect } from 'react';
function useEvent(target, type, listener, cleanup) {
var storedListener = useRef(listener);
var storedCleanup = useRef(cleanup);
useEffect(() => {
storedListener.current = listener;
storedCleanup.current = cleanup;
});
useEffect(() => {
var targetEl = target && 'current' in target ? target.current : target;
if (!targetEl) return;
var didUnsubscribe = 0;
function listener() {
if (didUnsubscribe) return;
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
storedListener.current.apply(this, args);
}
targetEl.addEventListener(type, listener);
var cleanup = storedCleanup.current;
return () => {
didUnsubscribe = 1;
targetEl.removeEventListener(type, listener);
cleanup && cleanup();
}; // eslint-disable-next-line react-hooks/exhaustive-deps
}, [target, type]);
}
export default useEvent;
//# sourceMappingURL=index.dev.mjs.map