升級react 15.4,常見的錯誤及解決方案


  最近項目由react0.14.X升級到react 15版本,因為react15還是做了一些相對大一點的更新的(詳情可以參考一下我的另一篇文章關於react15的一點總結),相對;來說react升級之后但react問題並不太多。但是react相應的配置,例如babel,react-hot-loader等相也做了一些升級。放到一起來說問題還是多一點的。這里把遇到的一些問題和注意點拿出來給大家分享一下,能避免的坑還是要盡量繞開的不是。

  一、首先react15的包分成了react和react-dom兩部分分別打包,所以用到react-dom的地方,導入的位置就要換掉了。如下面圖示:

  二、react,babel是環環相扣的。升級了react之后升級babel是在所難免的過程了,

注意升級的順序,babel->babel-*其他相關項->babel-core。原有相關依賴項不先行升級的話對babel-core的是有版本要求的,會導致升級失敗。

  三、升級babel之后,原有babel5的寫法已經被廢棄,所以會報錯:

    ReferenceError: [BABEL] XXXX.jsx: Unknown option: stage(或loose)

babel6只支持presets和plugins兩個屬性了。babel 最新版本babel6的相關配置解析可以看下這篇文章。此外,如果少引用了某個插件。會有類似下面的報錯:

    Module build failed: SyntaxError: index.js: Unexpected token 

 四、
如果你用到了react-hot-loader實現熱加載的話,會遇見下面的錯誤: 
Cannot resolve module 'react/lib/ReactMount'
switch to react-hot-loader 3.x!

剛才提到的相應配置也要升級,這是比較麻煩的一點。所以react-hot-loader要升級到3.X,不過我發現npm上最新的版本竟然也是beta版,希望不會有其他變動。

  五、僅僅是把react-hot-loader升級到3.X還不算完,升級完之后react-hot-loader的用法也要有相應改變。此時會有下面的錯誤:

  不能像原來一樣在webpack中直接加載react-hot-loader:

  需要從webpack中移除react-hot loader。.barbelrc中增加plugins屬性:react-hot-loader/babel。此處問題比較多,大致應該裝以下預設和插件(babel 最新版本babel6的相關配置解析可以看下這篇文章,更好理解):

    

  六、上面說到的相關配置還有一個,如果你用到react-router的話。同樣需要升級到3.X版本,如果是1.X的版本的寫法也需要做些改變,當遇到下面的錯誤時:

  

根據hash匹配的路由,不需要自己創建hsitory對象,直接導入react-router 3.X 現有的hashHistory對象即可。

  七、react15官方文檔中提到,增加了比較人性化的報警和錯誤信息。但是個人認為有點矯枉過正的感覺,下面的warning是肯定會看到的:

官方解釋:You are using a non-standard DOM attribute, perhaps to represent custom data. Custom data attributes should always have a data- prefix, as described in https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Using_data_attributes

也就是說,如果不是dom元素原生的屬性的話,必須要帶上data-,否則認為是unknown的,就會報警。但是個人認為現在提這個所謂的規范有點為時已晚,因為大型的項目都已經比較成熟了,如果為了這個標准再去修改相應的內容,大部分人應該是不情願的,有種矯枉過正的感覺。考慮到大家的反饋,react開發小組的成員已經妥協了,未來的版本會去掉這種校驗。In future versions of React we plan to pass such props “through” without the whitelist。

  八,建議避免bind來綁定this,可以用箭頭函數來替換。不然babel轉譯的時候會有報錯的情況。

 

  以上就是本次項目升級過程中暫時碰到一些問題,做個總結為后面的同學做個參考。對於還沒有升級的項目,個人建議暫時不要升級了,畢竟有些配置還是非穩定版本,等穩定了再動。這次升級我只是在備用分支上做了操作,目前來看還是比較明智的。在升級的過程中有好多問題,搜索引擎是不給力的,還是需要自己摸索的,所以感覺有必要總結一下給后來者一個參考,共同學習提高。

 


免責聲明!

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



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