乐趣区

关于前端:React点击空白处关闭弹框

前置常识:

  • React 的合成事件零碎:reactv17 之前,事件代理到 document 上,react17 和 react18 中,则委托到根节点。冒泡阶段执行。
  • 执行程序为:原生 dom 事件 -》React 合成事件 -》原生 ducument 事件
    援用
  • React 合成事件封装了 stopPropagation 办法,e.stopPropagation 能够阻塞合成事件之间的冒泡,不能阻止合成事件冒泡到原生 ducument 监听,因为 stopPropagation 只能阻止事件冒泡至其父节点
    援用
  • stopPropagation 是只能阻止事件冒泡至其父节点,而 stopImmediatePropagation 既能阻止事件冒泡至父节点,也能阻止以后节点上其余同类型事件的触发,阻止的同类型事件须要是后绑定的
  • 留神 react 合成事件并没有封装 stopImmediatePropagation,有须要用 e.nativeEvent.stopImmediatePropagation

问题:点击页面任意空白处,敞开弹框

需注意:不要影响到弹框外部的点击事件

两种计划:

  1. 在原生 ducument 上监听 click 事件,捕捉到就敞开弹框
    在弹框外部绑定的 click 事件中阻止冒泡,reactv17 前用 e.nativeEvent.stopImmediatePropagation, reactv17 和 reactv18 用 e.stopPropagation
  2. 在弹框和页面之间设置一个笼罩整个页面的通明蒙层,点击蒙层就敞开弹框

对于计划 1 中须要留神 React 的版本辨别

退出移动版