react生命週期

這裏寫圖片描述

組件在初始化時會觸發5個鉤子函數:
1、getDefaultProps()

設置默認的props,也可以用defaultProps設置組件的默認屬性。

2、getInitialState()

在使用es6的class語法時是沒有這個鉤子函數的,可以直接在constructor中定義this.state。此時可以訪問this.props。

3、componentWillMount()

組件初始化時只調用,以後組件更新不調用,整個生命週期只調用一次,此時可以修改state。

4、 render()

react最重要的步驟,創建虛擬dom,進行diff算法,更新dom樹都在此進行。此時就不能更改state了。

5、componentDidMount()

組件渲染之後調用,可以通過this.getDOMNode()獲取和操作dom節點,只調用一次。

在更新時也會觸發5個鉤子函數:

6、componentWillReceivePorps(nextProps)

組件初始化時不調用,組件接受新的props時調用。

7、shouldComponentUpdate(nextProps, nextState)

react性能優化非常重要的一環。組件接受新的state或者props時調用,我們可以設置在此對比前後兩個props和state是否相同,如果相同則返回false阻止更新,因爲相同的屬性狀態一定會生成相同的dom樹,這樣就不需要創造新的dom樹和舊的dom樹進行diff算法對比,節省大量性能,尤其是在dom結構複雜的時候。不過調用this.forceUpdate會跳過此步驟。

8、componentWillUpdata(nextProps, nextState)

組件初始化時不調用,只有在組件將要更新時才調用,此時可以修改state

9、render()

不多說

10、componentDidUpdate()

組件初始化時不調用,組件更新完成後調用,此時可以獲取dom節點。 還有一個卸載鉤子函數

11、componentWillUnmount()

組件將要卸載時調用,一些事件監聽和定時器需要在此時清除。

我是參考這個鏈接的。詳細請看:https://segmentfault.com/a/1190000007642740

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章