React組件開發小記(三)——你為什么需要shouldComponentUpdate

   在談到React優化的時候,shouldComponentUpdate方法是最簡單直接的優化方式。如果你在render方法中隨便打印一點東西(console.log(...)),你會發現console.log許多次,說明你的組件渲染了很多次。而在很多情況下你會發現有很多莫名其妙的打印,尤其是在層級比較深的組件中。

   如下圖:
tree.png

如果想只渲染紅色這一分支,如果不做優化,黃色部分是額外浪費渲染的部分。
你調用了setState或者傳入了不同的 Props 的時候,shouldComponentUpdate會默認全部返回true,React 就會重渲染組件。return false就是為了減少額外渲染的這部分。但是這個方法有個缺陷。就是如果你只想讓第一個紅色組件不重新渲染,而在這個組件上使用了return false,會導致其所有的子組件都不重新渲染。但這個顯然不是我們想要的效果。

   比較適合使用componentShouldUpdate組件是:使用只負責渲染的組件或者是組件樹中較深位置的組件。

shouldPureComponentUpdate方法是基于shouldComponentUpdate的一種比較當前 State 以及 Props 未來差異的方法。這個方法對對象進行了淺比較。什么是淺比較?舉個例子,如果一個數字從1變成了2,這個是可以比較出來的,如果是數組中一個項改變了,這個 是無法比較出來的。而深比較又會帶來一定的消耗。

如何減少比較來降低消耗?這就又要引入不可變數據結構(不可變數據是指一旦創建就不能被修改的數據)了。Immutable.js可以實現js的不可變數據。(太晚了,待續。。。。)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 深入JSX date:20170412筆記原文其實JSX是React.createElement(componen...
    gaoer1938閱讀 8,106評論 2 35
  • 自己最近的項目是基于react的,于是讀了一遍react的文檔,做了一些記錄(除了REFERENCE部分還沒開始讀...
    潘逸飛閱讀 3,485評論 1 10
  • 目前,react組件有三種寫法,分別是es5的createClass寫法,es6的class寫法,以及statel...
    ZoomFunc閱讀 1,849評論 0 1
  • 小時侯總是好奇,自己是那兒來的呢,也總是追著大人問了又問,呵呵,好像在捕捉自己前世的影子。 再大點又總是懷疑,媽媽...
    云可彥閱讀 240評論 0 0