技能get,React的優雅升級!


今日,我們不啖雞湯,不飲雞血

只有干貨——關於React的優雅升級

雙手奉上,來,干了!

-2019年第4期-

夫 子 說

本次升級基礎包情況:react 15.6 -> 16.6

升級流程:

1、升級React

2、功能測試

OK,下面開始和我一起升級吧~

 

首先,新拉一個分支,避免“意外事故”的出現~

然后,放手開干。

 

React 15 到 React 16

用npm-check檢測一下,用-u參數進行交互式UI展示。

npm-check是一款可以在命令行通過圖形化界面進行檢測package.json文件的包有沒有版本更新情況的插件,通過使用npm-check不僅能夠節省時間效率,還能直觀的選擇特定需要升級的包,另外它還會提供包地址、具體版本信息、當前版本信息等等,是一款不可多得npm效率工具。

Good,按上下鍵選擇react,按一下空格選擇,按enter就開始安裝了。(此處省略安裝過程)

安裝完成后我可以看到package.json文件也更新了,現在的react是16版本的了:

下面運行dev跑起來,出意外的話就不會報錯了。

激動ing...

果然沒出意外,下面看一下具體輸出。

上面說,這些dependencies沒有找到,然后列了很多路徑。一個關鍵字眼:react-dom 躍入眼簾

在來看看我的dom版本:

居然是15版本的,難道是版本不兼容導致的嗎,太令人匪思所夷了,不管怎樣,我還是升級dom試一下吧。

npm-check -u

選擇dom,然后按enter。

開始安裝

安裝完成

再次運行npm run dev命令:

開始構建,靜靜等候奇跡的出現吧~

噓出一口氣,終於運行起來了,接下來就是功能測試。

 

功能測試

一打開首頁,不出所料,控制台出錯了……

在項目里進行全局搜索,貌似是這句話報了錯:

PropTypes是引用的prop-types包,去檢查一下這個包的版本:

15版本的,趕緊升級一下

最新的居然是15.6的,希望可以跑起來。

構建完了,再去看看瀏覽器。

一打開首頁,還是有這個錯誤。

在stof(stackoverflow)上找到了一個說可能是eslint的原因,我升級一下我的eslint:3.19 -》 5.9

【並沒有什么用】

來看看VS提示

刪掉node_modules文件夾重新安裝然后運行項目。

居然沒問題??!!怎么會這樣??!!難道是install成舊版本了嗎!!!檢查package.json:

不是啊~天吶!不會是package.json文件亂套了吧!難道在dev環境推上去的也是16版本的嗎?!

先切換分支檢查一下:

謝天謝地並沒有。

再切換回去,不相信這個問題莫名其妙就沒有了。

首先檢查一下react的包到底是什么版本的。

看了react的包的package.json文件,的確是16版本的。那么proptypes問題是怎樣消失不見的呢?

逆反一下之前做的步驟。

首先卸載@types/prop-types。

發現問題了~是頁面進錯導致沒有運行使用proptypes相關代碼才沒報錯...

下面正式開始解決這個問題,溫習一遍這個錯誤:

用了oneOfType的只有一個index.js文件里:

這個PropTypes是引自

根據react16官方的文檔在15.5版本就需要使用prop-types使用proptype對象:

其官方的示例也跟我項目的代碼一致:

那么就應該不是自己項目業務代碼的問題了,點擊控制台報錯代碼定位過去,然后在node_modules文件夾里找一下啥包用了這個:

原來是react-style-proptype用到了,在全局找一下看看哪里使用了這個包:

原來是react-split-pane包用到了react-style-proptype的2.0.2版本,最新的react-style-proptype是3.x版本。

plit-pane是0.x版本:

升級一下split-pane:

升級結束后split-pane引用了react-style-proptype的3.0.0版本,在react-style-proptype包下的index文件可以看到其使用React.PropTypes變成了單獨的PropType對象:

那么我的程序可以正常跑了嗎?

並不可以:

用同樣的方法定位代碼查看proptype使用是不是有問題:

(被any擋住的是string)

仍然是split-pane報的錯,怎么會這樣呢?看起來代碼有點不一樣,難道是沒有重新run的緣故嗎,我重新run一下。

果然沒錯,split-pane不報錯了,但是項目的代碼報了錯:

全局搜索一下哪里是用這種方式的然后統一替換掉吧!

成功運行啦!

經過測試沒有發現致命問題,本次react升級就大功告成啦!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM