36 lines
1.1 KiB
JavaScript
36 lines
1.1 KiB
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;
|