1. 程式人生 > 實用技巧 >React 生命週期函式

React 生命週期函式

·初始化

1.getDefaultProps()

注:getDefaultProps這種定義方式是用在你定義元件用的是React.createClass方式的
如果使用的是es6的語法,例如用的是class 元件名 extends React.Component的話,就不要用
getDefaultProps這種方式去定義props了,而是應該用 static propTypes ={}來定義,這樣就不會有警了

     設定預設的props,也可以用dufaultProps設定元件的預設屬性. ---》設定

2.getInitialState()

注:與getDefaultProps的區別在於前者設定預設的 props,後者設定初始的state在使用es6的class語法時是沒有這個鉤子函式的,可以直接在constructor中定義 this.state。此時可以訪問this.props

3.componentWillMount()

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

4. render()

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

5.componentDidMount()

注:元件渲染之後呼叫,只調用一次。可以在此請求資料

·更新

1.componentWillReceiveProps(nextProps)

注:元件初始化時不呼叫,元件接受新的props時呼叫。

2.shouldComponentUpdate(nextProps, nextState)

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

3.componentWillUpdata(nextProps, nextState)

注:元件初始化時不呼叫,只有在元件將要更新時才呼叫,此時可以修改state

4.render()

注:元件渲染

5.componentDidUpdate()

注:元件初始化時不呼叫,元件更新完成後呼叫,此時可以獲取dom節點。

·解除安裝

componentWillUnmount()
注:元件將要解除安裝時呼叫,一些事件監聽和定時器需要在此時清除。