我有一个最近开始发出此错误的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
个对象。
但是我们已经缩小了产生这个错误的步骤:
答案 0 :(得分:3)
事实证明,React的缩小/生产版本与Chrome65不兼容。
我们将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翻转回' production'。
目前正试图找出wrappedComponentProps
对象导致问题的原因,但像{ myFunc: function(){} }
这样的常规对象并不存在。
(任何帮助调试这将不胜感激!)
在运行delete wrapperComponentProps[ANY-VALID-KEY]
之前调用Object.entries()
可以解决问题,因此我怀疑它与对象安全性/缓存有关。
答案 1 :(得分:1)
I found a solution. I still think there was an error with Chrome v 65's minification process but I started deleting clickable components from my app until the error was gone to flush out the problematic component.
Turns out it was a <LinkContainer />
from react-bootstrap-router
library that was causing the bug. We replaced with react-router
link components and the error went away!