在具有許多元件的項目中,在銷毀時釋放元件所占用的資源非常重要,在React中每一個元件Component都有自己獨立的狀态,互相不受影響在浏覽器中的狀态有三種:
Mounting(挂載)
Update(更新)
Unmounted(解除安裝)

1.挂載
** constructor**
初始化方法定義
** componentWillMount**
第一次渲染(render)前被加載一次,它也是一個放置初始化state值的好地方。
** render
rendercomponentDidMount**
render階段觸發一次,ajax調用可以放到這裡。每次渲染之後執行,擷取dom的好地方,也可以setState,但是會額外觸發一次render。
2.更新
** componentWillReceiveProps(nextProps)**
這個生命周期涉及到父子元件傳參的問題,元件正在接收新的props時,它将被調用。但是它不會在初次頁面渲染(render)時被調用。
** shouldComponentUpdate
(nextProps, nextState)**
這個生命周期是用來做元件優化的,它傳回的是布爾值,預設傳回true。當一個新的props或者state正在被接收時,該鈎子會在頁面渲染(render)前被調用。它也不會在初次頁面渲染(render)時被調用。元件接受新的state或者props時調用,我們可以設定在此對比前後兩個props和state是否相同,如果相同則傳回false阻止更新,因為相同的屬性狀态一定會生成相同的dom樹,這樣就不需要創造新的dom樹和舊的dom樹進行diff算法對比,節省大量性能,尤其是在dom結構複雜的時候。如傳回false,将不會觸發
componentWillUpdate()、render()、
componentDidUpdate()
** componentWillUpdate**
該鈎子在shouldComponentUpdate()鈎子之後(傳回true),render()之前調用。不會在初次頁面渲染(render)時被調用。該鈎子的作用是為更新做準備。
** render
rendercomponentDidUpdate**
如果在這裡setState,應設定前置條件,否則會陷入無限循環(深有體會)。元件更新之後調用立即重新整理DOM不會在初次頁面渲染(render)時被調用。
3.解除安裝
** componentWillUnmount**
元件銷毀之前調用一般用于清除定時器,解除安裝dom事件避免記憶體洩漏和一些無意義的操作。
總結:React鈎子函數執行順序
參考文獻
參考文章: