UNPKG

@nutui/nutui-react

Version:

京东风格的轻量级移动端 React 组件库,支持一套代码生成 H5 和小程序

41 lines (40 loc) 1.1 kB
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 };