React onClick 在我的任何浏览器中都不起作用,但对于同事来说却可以

pga*_*lle 4 npm reactjs webpack webpack-dev-server yarnpkg

onClick在一个非常简单的 React 函数组件中创建了一个处理程序:

export default function MyButton() {
   return (
      <button
         onClick={() => {
            console.log('test');
         }}
      >
         Button
      </button>
   );
}
Run Code Online (Sandbox Code Playgroud)

现在奇怪的部分是:无论我使用什么浏览器,该事件都不会触发。我已经创建了这样一个组件数百次,直到现在一切都很好。

对于其他人来说,这段代码可以正常工作。

我无法共享整个项目或示例存储库。它实际上只是一个随处可见的简单 React 应用程序。

它无法在我的系统上运行的原因可能是什么?

编辑:

错误在某种程度上是在纱线内部的。我呼吁webpack-dev-server -d source-map --mode=development开发并且我正在使用"webpack-dev-server": "^4.0.0-beta.0". 我认为缓存可能已以某种方式损坏。

npm为了解决这个问题,我删除了输出目录并使用而不是启动脚本yarn。这样,即使我yarn再次使用,它仍然有效。

我真的不知道为什么会发生这种事。很高兴知道原因。

Tan*_*kar 15

我也遇到了同样的问题,问题的原因(在我的情况下,可能是你的)是 HtmlWebpackPlugin,HtmlWebpack 插件正在 index.html 的 head 标签中添加一个捆绑的附加脚本标签。

我的html

<html>
  <head>
    <title>my-react-app</title>
  </head>
  <body>
    <div id="root"></div>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

htmlwebpackplugin生成html

<html>
  <head>
    <title>my-react-app</title>
  <script defer src="bundle.js"></script></head>
  <body>
    <div id="root"></div>
    <script src="bundle.js"></script>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

由于这个额外的脚本标签,react 中出现了问题(我在 reddit 上读到了一篇关于这个问题的帖子,他也有同一包的多个脚本,并且他遇到了同样的问题),我通过删除我的脚本标签解决了这个问题,但是我们可以使用copywebpack插件来复制html。或者其他解决方案是配置 htmlwebpackplugin 的吸吮方式,它不会注入任何附加标签

...
    new HtmlWebpackPlugin({
      name: "index.html",
      inject: false,
      template: path.resolve(__dirname, "public/index.html"),
    }),
...
Run Code Online (Sandbox Code Playgroud)