单击按钮时,我希望显示模式.
在react 18中,click事件会触发,因为按钮click显示happend before模式?
如果我改为"react 17",则不会发生这种情况.
示例:https://codesandbox.io/s/festive-mopsa-lgke69?file=/src/App.js
单击按钮时,我希望显示模式.
在react 18中,click事件会触发,因为按钮click显示happend before模式?
如果我改为"react 17",则不会发生这种情况.
示例:https://codesandbox.io/s/festive-mopsa-lgke69?file=/src/App.js
您可以调用event.stopPropagation以防止多个单击处理程序捕获相同的单击事件.
onClick={(e) => {
e.stopPropagation();
setShow(true);
}}
我不知道为什么React 17和React 18会有不同.React使用自己的"合成事件",两个版本之间事件传播/冒泡的方式可能有所改变.
它可能与React 18中的"自动配料"有关.
在您的示例中,模态组件使用document.addEventlistener()
的本机事件处理.似乎React 18处理应用程序内部的点击,这会触发状态更改和重新渲染,装载Modal
组件,运行useEffect()
挂钩,并在点击事件传播到窗口 node 之前创建新的事件侦听器.在React 17中,事件可能在重新渲染之前完成传播.