【React】react-resizable使用报错的坑 - React报错:TypeError: Super expression must either be null or a function。


背景:项目是用react + antd开发的, 前天测试大哥说灰度环境下某个详情页面打不开了,但测试环境没有问题。然后上灰度环境看了下,js报错:TypeError: Super expression must either be null or a function。

分析:

1.代码是同一套,只是打包的一些配置不一样而已,但这些配置并不会影响到某个页面。

2.本地调试没有报错,测试环境打包也没有报错。灰度打包打开该详情页面一直报TypeError: Super expression must either be null or a function。

3.看代码。对比了下有问题和没问题的详情页面。发现报错的详情页面都引用了一个二次封装的antd组件。

排查:

1.直接注释掉有问题组件,打包。发现页面能正常打开。那就定位到该二次封装的组件上了。但有点纳闷。测试环境和本地调试都是没有问题的,为啥灰度打包的就会出错了呢?

2.我们项目是Jenkins打包的,查看打包脚本。发现灰度打包的时候会把原文件夹内容先全部清空再pull 代码再安装依赖,打包构建。而测试环境是直接pull代码,安装依赖打包构建。那是不是存在某个依赖更新了导致的呢?

3.带着以为继续看代码。出问题的组件是使用了react-resizable对antd的Table组件进行的二次封装。问题肯定不是出在antd上。如果antd版本有问题那不应该只有那个详情页面报错。那问题就出在react-resizable上了。

4.上github 翻issue。果不其然,https://github.com/STRML/react-resizable/issues/128。是因为react-resizable依赖的react-draggable升级了导致的。

解决办法:

找到问题源头就好解决了。

第一个解决办法:可以手动把react-resizable依赖的react-draggable改到4.3版本以前。

第二个解决办法:本地和测试为啥没问题,是因为本地被测试环境有yarn.lock文件,依赖已经锁版本号了,所以没出问题。把本地的lock文件也推上代码仓,灰度打包验证, ojbk。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM