React组件实现点击其他任意处关闭

基本原理是监听文档document点击事件,依据组件是否被点击,处理不同业务。

1.监听事件

	useEffect(() => {
		document.addEventListener('click', onClick);
		return () => {
			document.removeEventListener('click', onClick);
		}
	})

2. 判断组件点击

如果自定义组件结构简单,可直接在组件点击事件中阻止进一步冒泡,参考:

	const onClickComponent = (e) => {
		e.nativeEvent.stopImmediatePropagation();
	}

而结构复杂,包含多个子组件时,可判断document实际点击目标e.target,若归属自定义组件,则选择不关闭。

if (customComponent.contains(e.target)) return;