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()
注:元件將要解除安裝時呼叫,一些事件監聽和定時器需要在此時清除。