简单写一个点击按钮显示元素,点击元素外的区域元素隐藏的demo
先定义一个事件,负责隐藏元素
const hidden = () => {
setStatus(false)
}
在uesEffect中添加监听和清除监听
useEffect(() => {
document.addEventListener('click', hidden)
return () => {
document.removeEventListener('click', hidden)
}
})
点击按钮和元素本身设置显示元素,并且添加阻止事件冒泡
const testlick = e => {
e.stopPropagation()
setStatus(true)
}
完整代码
import React, { useState, useEffect } from 'react'
import { Button } from 'antd'
const EventPop = () => {
const [status, setStatus] = useState(false)
useEffect(() => {
// 添加监听事件
document.addEventListener('click', hidden)
return () => {
// 销毁的时候清除监听
document.removeEventListener('click', hidden)
}
})
const hidden = () => {
setStatus(false)
}
const testlick = e => {
// 阻止事件冒泡
e.stopPropagation()
setStatus(true)
}
return (
<div style={{ margin: 50 }}>
<Button onClick={testlick}>点击我</Button>
<div onClick={testlick} style={{ display: status ? '' : 'none', width: '200px', height: '200px', backgroundColor: 'tomato' }}></div>
</div>
)
}
export default EventPop