@nutui/nutui-react
Version:
京东风格的轻量级移动端 React 组件库,支持一套代码生成 H5 和小程序
44 lines (43 loc) • 1.51 kB
JavaScript
import { useEffect } from "react";
import { isFunction } from "../utils";
var getTargetElement = function(target) {
var targetElement;
if (isFunction(target)) {
targetElement = target();
} else if ('current' in target) {
targetElement = target.current;
} else {
targetElement = target;
}
return targetElement;
};
export default function useClickAway(onClickAway, target) {
var // eslint-disable-next-line default-param-last
eventName = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : 'click', useCapture = arguments.length > 3 ? arguments[3] : void 0, isListener = arguments.length > 4 ? arguments[4] : void 0, outerVar = arguments.length > 5 ? arguments[5] : void 0;
var handler = function(event) {
var targets = Array.isArray(target) ? target : [
target
];
if (targets.some(function(item) {
var targetElement = getTargetElement(item);
return !targetElement || targetElement.contains(event.target);
})) {
return;
}
if (outerVar) {
onClickAway();
}
};
useEffect(function() {
if (isListener) {
window.addEventListener(eventName, handler, useCapture);
} else {
window.removeEventListener(eventName, handler, useCapture);
}
return function() {
window.removeEventListener(eventName, handler, useCapture);
};
}, [
target
]);
}