React-点击按钮显示下拉框,点击其他隐藏

824 阅读1分钟

功能点:点击按钮显示下拉框,下拉框中的内容可点击,点击下拉框以外的任意位置,可隐藏下拉框

  • 点击显示隐藏:!true
  • 下拉框中的内容可点击(阻止冒泡):e.nativeEvent.stopImmediatePropagation()、e.stopPropagation()
  • 点击下拉框以外的任意位置隐藏下拉框:document.addEventListener('click', clickShow, false)和document.removeEventListener('click', clickShow, false)

const [status, setStatus] = useState<boolean>(false)
const clickShow = () => {
    setStatus(!status)
}

useEffect(() => {
    if (status) {
        document.addEventListener('click', clickShow, false)
        return () => {
            document.removeEventListener('click', clickShow, false)
        }
    }
}, [status])
    

<Button type="primary" className="btn-width-140-height-36"
        onClick={() => clickShow()} style={{ position: 'relative' }}
>
    创建 <i className={`iconfont icon-a-zhankai12x12 cui-icon-right ${status ? 'rotate-180' : 'rotate-0'}`} />
    {status ? (
        <div
            className="status-box"
            onClick={(e) => {
                e.nativeEvent.stopImmediatePropagation()
                e.stopPropagation()

                console.log('阻止冒泡')
            }}
        >
            可点击弹框中的内容,需要阻止冒泡
        </div>
    ) : null}
</Button>

.status-box {
    position: absolute;
    top: 36px;
    left: 0;
    z-index: 10;
    width: 140px;
    height: 160px;
    color: black;
    word-break: break-all;
    background-color: #fff;
    border: 1px solid @blue-base;
    border-radius: 8px;
    transition: all 0.3s ease-in-out;
}

image.png

image.png

参考链接:www.jianshu.com/p/f1958db72…