@nutui/nutui-react
Version:
京东风格的轻量级移动端 React 组件库,支持一套代码生成 H5 和小程序
41 lines (40 loc) • 1.1 kB
JavaScript
import { useEffect } from "react";
import { i as isFunction } from "./index.js";
const getTargetElement = (target) => {
let targetElement;
if (isFunction(target)) {
targetElement = target();
} else if ("current" in target) {
targetElement = target.current;
} else {
targetElement = target;
}
return targetElement;
};
function useClickAway(onClickAway, target, eventName = "click", useCapture, isListener, outerVar) {
const handler = (event) => {
const targets = Array.isArray(target) ? target : [target];
if (targets.some((item) => {
const targetElement = getTargetElement(item);
return !targetElement || targetElement.contains(event.target);
})) {
return;
}
if (outerVar) {
onClickAway();
}
};
useEffect(() => {
if (isListener) {
window.addEventListener(eventName, handler, useCapture);
} else {
window.removeEventListener(eventName, handler, useCapture);
}
return () => {
window.removeEventListener(eventName, handler, useCapture);
};
}, [target]);
}
export {
useClickAway as u
};