共计 647 个字符,预计需要花费 2 分钟才能阅读完成。
前置常识:
- React 的合成事件零碎:reactv17 之前,事件代理到 document 上,react17 和 react18 中,则委托到根节点。冒泡阶段执行。
- 执行程序为:原生 dom 事件 -》React 合成事件 -》原生 ducument 事件
援用- React 合成事件封装了 stopPropagation 办法,e.stopPropagation 能够阻塞合成事件之间的冒泡,不能阻止合成事件冒泡到原生 ducument 监听,因为 stopPropagation 只能阻止事件冒泡至其父节点
援用- stopPropagation 是只能阻止事件冒泡至其父节点,而 stopImmediatePropagation 既能阻止事件冒泡至父节点,也能阻止以后节点上其余同类型事件的触发,阻止的同类型事件须要是后绑定的
- 留神 react 合成事件并没有封装 stopImmediatePropagation,有须要用 e.nativeEvent.stopImmediatePropagation
问题:点击页面任意空白处,敞开弹框
需注意:不要影响到弹框外部的点击事件
两种计划:
- 在原生 ducument 上监听 click 事件,捕捉到就敞开弹框
在弹框外部绑定的 click 事件中阻止冒泡,reactv17 前用 e.nativeEvent.stopImmediatePropagation, reactv17 和 reactv18 用 e.stopPropagation - 在弹框和页面之间设置一个笼罩整个页面的通明蒙层,点击蒙层就敞开弹框
对于计划 1 中须要留神 React 的版本辨别
正文完