javascript - 更新到 Chrome v65 并开始收到此错误 : Expected onClick listener to be a function, 而不是收到类型字符串

标签 javascript reactjs google-chrome onclick minify

我有一个最近开始出现此错误的 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 事件,没有一个函数可以作为字符串传入或作为字符串返回。尽管我们有一些可以传递 NULL 对象的 onClick 事件。

但是我们已经缩小了产生这个错误的步骤:

  1. 它只是在我们更新到 Chrome 版本 65 时才开始出现,该版本仅在 2 天前发布。该错误不会发生在以前的 Chrome 版本中(v65 之前)
  2. 它只发生在我们的 React 应用程序的生产构建中,而不是在 localhost 上(这可能是一个缩小错误吗?)
  3. 该错误不会发生在我们的其他应用程序中,这些应用程序也是使用 React 构建并使用类似的 webpack 配置缩小的。

有没有人知道为什么会发生此错误以及我们如何解决它?

Here's a screenshot of the error message in Chrome console

最佳答案

事实证明,与 Chrome65 不兼容的是 React 的缩小版/生产版。

我们将 process.env.NODE_ENV 翻转回“开发”,直到我们找到更好的解决方案,或者 Chrome 解决了 v65 的问题。


更新:如果您使用来自 redux (https://github.com/reactjs/redux/blob/master/docs/recipes/UsingImmutableJS.md#use-a-higher-order-component-to-convert-your-smart-components-immutablejs-props-to-your-dumb-components-javascript-props) 的 toJS() HOC,问题出在 Object.entries()

要暂时解决此问题,请将 Object.entries 替换为自定义 entries 函数:

(ES6)

const entries = x => Object.keys(x).reduce((y, z) => y.push([z, x[z]]) && y, []);

您应该能够将您的 NODE_ENV 切换回“生产”。

目前正在尝试找出为什么 wrappedComponentProps 对象会导致问题,但像 { myFunc: function(){} } 这样的常规对象不会。

(任何调试帮助将不胜感激!)

在运行 Object.entries() 之前调用 delete wrapperComponentProps[ANY-VALID-KEY] 修复了这个问题,所以我怀疑这与对象安全/缓存有关.

关于javascript - 更新到 Chrome v65 并开始收到此错误 : Expected onClick listener to be a function, 而不是收到类型字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49182801/

相关文章:

javascript - SoundCloud URL 的正则表达式

javascript - 坚持到顶部然后放入 css - [我有示例网站]

javascript - JQuery - 如果你不是,请执行此操作。将此 div 悬停

reactjs - react-simple-maps 颠倒渲染 map

jquery - Google Chrome 上的多重渲染问题

javascript - 如何覆盖默认的 Alt 键 + 单击操作?浏览器进行下载,但是

html - Chrome 选择元素不稳定

javascript - 是否可以一口气定义并立即调用一个函数?

javascript - 是否可以创建 React-native 组件的索引并将它们作为 prop 有条件地传递?

javascript - React/API/Chart.js : Expected an assignment or function call and instead saw an expression