单击按钮时,我希望显示模式.

在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中,事件可能在重新渲染之前完成传播.

Reactjs相关问答推荐

react应用程序中的字体不适用于.scss扩展名

为什么安装FLOBIT后,所有的输入FIELD现在都有一个蓝色的轮廓?

try 在Dockerfile中使用AWS CLI将React构建工件上传到S3时出错

通过单击具有此值的按钮将值添加到数组对象键

获取点击的国家/地区名称react 映射

使用`Link`包装`tr`标记会在Next.js中产生水合错误14

获取未捕获的错误:Gatsby生产版本上的最小化react 错误#418

关于forwardRef,我可以';我不理解第二个用例

console.logs 没有显示在浏览器控制台上,但显示在我的终端上

在React Router 6中,在路由渲染后更新路由数据

获取更多数据后更新 DOM,而不刷新 React.js 中的页面

Zod 验证模式根据另一个数组字段使字段成为必需字段

当我在 React Router Dom 中使用两个参数并直接在页面上导航时,数据获取没有发生

虽然通过了身份认证,但并没有导航到请求的页面

位于组件material-ui中的TextField中的 map 功能不起作用

如果传递给挂钩的数据需要事先修改,如何使用自定义挂钩?

在 React 中,为什么不能向空片段添加键(短语法)?

如何在 React JS 上使文本中的单词可点击

设置 Material UI 表格默认排序

如何在 Reactjs 中判断受保护路由上的用户角色?