javascript - React - 使用 window.onClick 事件监听器导航元素
问题描述
我正在为我的 react 项目构建一个弹出式登录窗口,我想在按下登录按钮时显示它,并在我单击容器外部时关闭它。外部区域实际上是一个父 div,它作为其子元素的模糊覆盖。我使用 useState 来控制布尔值,使用 useRef 挂钩来控制显示属性,如下所示。
<overlay onClick={()=>setPopupActive(false)}>
<popup-window ref={displayPopupRef}>...some codes...</popup-window>..it only displays when the state is true
</overlay>
由于我在父元素上使用 useState,它也会影响作为弹出窗口的子元素,并在我单击子元素时将其关闭。我试图将 stopPropagation 放在孩子身上,但它阻止了我的一些链接,这些链接是父组件的一部分。
由于我找不到解决此问题的方法,因此我使用了另一种方法,即使用 window.onClick 事件侦听器...请参阅下面的代码
useEffect(() => {
window.onclick = (e) => {
if (e.target.className === 'login-btn')
return displayPopupRef.current.style.display = 'grid'
if(['login-container-overlay','close-button'].includes(e.target.className))
return displayPopupRef.current.style.display = 'none'
}
}, [displayPopupRef])
它工作得很好。我也在搜索栏上使用相同的方法,everythink 似乎没问题,控制台很干净......
由于我是初学者程序员的原因,我一直想知道这是否是正确的做法,在这种情况下使用 window.onclick 事件是否有任何问题。
解决方案
推荐阅读
- javascript - 为什么我不断得到这个 setstate 不是一个函数?
- php - 处理 CPU 密集型任务:node vs php
- javascript - 如何使用 selenium webdriver 处理日期选择器(jss)?
- linux - 零星的 USB 麦克风失真
- android - 随屏幕改变方向
- python - 如果输入值在集合中,我可以从字典中返回一个值吗?
- typescript - 是否可以将广义类型转换为联合
- python - 可点击节点 Networkx Python
- r-markdown - 为什么 Xaringan 幻灯片中没有出现智能引号和破折号?
- javascript - 如何解决在到达路由器中重定向后丢失输入事件跟踪的问题