【发布时间】:2018-08-17 09:04:53
【问题描述】:
我有一个最近开始发出此错误的 React 应用程序。
https://reactjs.org/docs/error-decoder.html?invariant=94&args[]=onClick&args[]=string
Minified React error #94:
Expected onClick listener to be a function, instead got type string
出现此错误时,我们的按钮/下拉菜单均不起作用,但网页并未冻结。它只发生在应用程序的一个部分。当我们导航到另一个部分并返回时,错误不会再次出现。
我已经检查了我们应用程序中的每个onClick 事件,没有一个函数可以作为字符串传入或作为字符串返回。虽然我们有一些onClick 事件可以传递给NULL 对象。
但是我们已经缩小了产生这个错误的步骤:
- 当我们更新到 Chrome 版本 65 时才开始出现这种情况,该版本仅在 2 天前发布。该错误不会出现在以前的 Chrome 版本(v65 之前)中
- 它只发生在我们的 React 应用程序的生产版本中,而不是在
localhost上(这可能是一个缩小错误吗?) - 该错误不会出现在我们的其他应用程序中,这些应用程序也是使用 React 构建并使用类似的 webpack 配置进行了缩小。
有没有人知道为什么会发生这个错误以及我们如何解决它?
【问题讨论】:
-
其他浏览器能用吗?
-
我们没有费心测试其他浏览器,因为我们的应用程序是内部的,用户只能使用 Chrome。我会尝试看看是否有任何弹出:)
-
当然,如果您的代码只能在 Chrome 中运行,那么您使用的更多特定于 Chrome 的东西可能会破坏其他浏览器 - 但无论如何测试都会很有趣跨度>
-
登录后我的应用程序中遇到了同样的问题。该页面在 prod 中会像您的一样抛出 React 错误 94,但不会在本地抛出任何内容。这完全破坏了我们的 QA 自动化,因为它依赖于带有最新 Chrome 的 Docker 容器来运行 Selenium 测试。另一个注意事项:Chrome Canary (v67) 似乎运行一切都没有错误。
-
@PP_vinnieg 似乎共同点是缩小的 React 代码与 Chrome v65 不兼容......一些库会产生这个错误。我认为这 2 个解决方案是:1)找到有问题的组件/函数并尝试以某种方式重写它或临时使用不同的组件库或 2)临时在生产环境中使用未缩小的 React 代码。
标签: javascript reactjs google-chrome onclick minify