有關React面試

簡生愛學習發表於2019-04-02

react將dom抽象為虛擬dom,通過新舊虛擬dom這兩個物件的差異(diff演算法),最終只把變化的部分重新渲染。提高渲染效率的過程;

Diff演算法

當你實際開發使用react的時候,某個時間點render()函式建立了一顆React元素樹,也就模擬一個虛擬dom樹,

在下一個state或者props更新的時候,render()函式將建立一顆新的React元素樹,也就模擬了一個新的虛擬dom樹

Tree Diff

將新舊兩顆虛擬dom樹,按照層級對應的關係,從頭到尾遍歷一遍,就能找到哪些元素是需要更新的。

react元件劃分

UI組價負責UI的呈現,容器元件負責管理資料和邏輯;兩者通過react-redux提供的connect方法聯絡起來。

為什麼虛擬dom會提高效能

虛擬dom相當於在js和真實dom中間加了一個快取,利用dom diff演算法避免了不必要的dom操作,從而提高效能。

diff演算法

把樹形結構按照層級分解,只比較同級元素。

給列表結構的每個同源新增唯一的key屬性,方便比較。

react優化

程式碼層面的優化:

shouldComponentUpdate(判斷是否需要呼叫render方法重新描繪dom)和PureComponent,避免過多render function

不要直接改變setState資料,每次返回一個新的值,不要改變原來的值;

將props和state攤平,只傳遞component需要的props

程式碼體積的優化:

使用生產版本;

使用動態import,懶載入react元件;

使用babel-plugin-import優化業務元件的引入,實現按需載入;

使用key來幫助react識別列表中所有子元件的最小變化;

元件封裝

扁平化設計資料,用純元件,減少不必要的render,命名規範,寫好對外介面,考慮健壯性,按需載入,高內聚,低耦合。

props和state:

同:

都會引發render的重新渲染

都可以自身設定初始值

異:

初始值:state來源getInitialState(constructor)函式,props來源於父元件或getDefaultProps

修改方式:只能setState,不能由父元件;props只能由父元件修改

對子元件:props是一個父元件傳遞給子元件的資料流。可以一直傳遞到子孫元件。state代表的是一個元件內部自身的狀態,只能在自身組建中存在

Redux

action:使用者觸發的一個普通物件

reducer:根據action操作來做出不同的資料響應,返回一個新的state

store值由reducer確定


相關文章