【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