react-use
Version:
Collection of React Hooks
36 lines (35 loc) • 1.08 kB
JavaScript
import { useEffect } from 'react';
import { isBrowser, off, on } from './misc/util';
var defaultTarget = isBrowser ? window : null;
var isListenerType1 = function (target) {
return !!target.addEventListener;
};
var isListenerType2 = function (target) {
return !!target.on;
};
var useEvent = function (name, handler, target, options) {
if (target === void 0) { target = defaultTarget; }
useEffect(function () {
if (!handler) {
return;
}
if (!target) {
return;
}
if (isListenerType1(target)) {
on(target, name, handler, options);
}
else if (isListenerType2(target)) {
target.on(name, handler, options);
}
return function () {
if (isListenerType1(target)) {
off(target, name, handler, options);
}
else if (isListenerType2(target)) {
target.off(name, handler, options);
}
};
}, [name, handler, target, JSON.stringify(options)]);
};
export default useEvent;