我有一个最近开始出现此错误的 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
事件。
但是我们已经缩小了产生这个错误的步骤:
- 它只是在我们更新到 Chrome 版本 65 时才开始出现,该版本仅在 2 天前发布。该错误不会发生在以前的 Chrome 版本中(v65 之前)
- 它只发生在我们的 React 应用程序的生产构建中,而不是在
localhost
上(这可能是一个缩小错误吗?) - 该错误不会发生在我们的其他应用程序中,这些应用程序也是使用 React 构建并使用类似的 webpack 配置缩小的。
有没有人知道为什么会发生此错误以及我们如何解决它?
最佳答案
事实证明,与 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/