Javascript 更新到Chrome v65并开始出现以下错误:预期onClick listener是一个函数,而不是获取类型字符串
我有一个React应用程序最近开始发出此错误 出现此错误时,我们的按钮/下拉列表均不起作用,但网页未冻结。它只发生在应用程序的一个部分。当我们导航到另一个部分并返回时,错误不会再次出现 我已经浏览了我们应用程序中的每一个Javascript 更新到Chrome v65并开始出现以下错误:预期onClick listener是一个函数,而不是获取类型字符串,javascript,reactjs,google-chrome,onclick,minify,Javascript,Reactjs,Google Chrome,Onclick,Minify,我有一个React应用程序最近开始发出此错误 出现此错误时,我们的按钮/下拉列表均不起作用,但网页未冻结。它只发生在应用程序的一个部分。当我们导航到另一个部分并返回时,错误不会再次出现 我已经浏览了我们应用程序中的每一个onClick事件,没有一个函数可以作为字符串传入或作为字符串返回。尽管我们有一些onClick事件可以传递给NULL对象 但我们已经缩小了产生此错误的步骤: 当我们更新到Chrome版本65时,它才开始出现,该版本仅在2天前发布。该漏洞在以前的Chrome版本(v65之前)中
onClick
事件,没有一个函数可以作为字符串传入或作为字符串返回。尽管我们有一些onClick
事件可以传递给NULL
对象
但我们已经缩小了产生此错误的步骤:
localhost
上(这可能是缩小错误吗?)我找到了解决办法。我仍然认为ChromeV65的缩小过程中有一个错误,但我开始从我的应用程序中删除可点击的组件,直到错误消失以清除有问题的组件
原来是来自
react bootstrap router
库的
导致了该错误。我们更换了react路由器
链路组件,错误消失了 结果表明,React的小型化/生产构建与Chrome65不兼容
我们将process.env.NODE_env切换回“development”,直到找到更好的解决方案,或者Chrome用v65解决了这个问题
更新:如果您使用的是redux()中的
toJS()
HOC,问题在于Object.entries()
要暂时解决此问题,请将对象.条目
替换为自定义条目
函数:
(ES6)
const entries=x=>Object.keys(x).reduce((y,z)=>y.push([z,x[z]])&y,[])代码>
您应该能够将节点_ENV翻转回“生产”
目前正在试图找出wrappedComponentProps
对象导致问题的原因,但是像{myFunc:function(){}}
这样的常规对象不会导致问题
(如有任何帮助,我们将不胜感激!)
在运行Object.entries()
之前调用delete wrapperComponentProps[ANY-VALID-KEY]
可以解决这个问题,因此我怀疑这与对象安全性/缓存有关。其他浏览器可以工作吗?我们没有为其他浏览器进行测试,因为我们的应用程序是内部的,用户只能使用Chrome。当然,如果你的代码只能在Chrome中运行,那么你可能会使用更多Chrome特有的东西来破坏其他浏览器,但不管怎样,在登录后我的应用程序中遇到同样的问题,测试一下会很有趣。该页面会抛出React错误94,就像prod中的错误一样,但不会在本地抛出任何东西。这完全破坏了我们的QA自动化,因为它依赖一个带有最新Chrome的Docker容器来运行Selenium测试。另一个注意事项:Chrome Canary(v67)似乎运行一切正常。@PP_vinnieg似乎公约数是缩小了的,因为代码与Chrome v65不兼容。。。有些库会产生这个bug。我认为这两种解决方案是:1)找到有问题的组件/函数,并尝试以某种方式重新编写它,或暂时使用其他组件库;2)在生产环境中暂时使用未缩小的React代码。啊,我们没有这个特定错误,也没有使用toJS
,但记录此错误并发布解决方案值得称赞。我们还考虑在生产中运行React的非小型构建,直到bug得到解决。
Minified React error #94:
Expected onClick listener to be a function, instead got type string