天天看點

前端React生命周期探索

在具有許多元件的項目中,在銷毀時釋放元件所占用的資源非常重要,在React中每一個元件Component都有自己獨立的狀态,互相不受影響在浏覽器中的狀态有三種:

Mounting(挂載)

Update(更新)

Unmounted(解除安裝)

前端React生命周期探索

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鈎子函數執行順序

前端React生命周期探索

參考文獻

參考文章: