上面的這幅圖已經很好地詮釋一個react組件的生命周期,所以認真看圖!認真看圖!認真看圖!
一、getDefaulProps()
1、這個是唯一一個作用于組件類的方法,只調用一次,用于設置默認的props,返回值是一個對象;
2、設置的props不是由父組件傳進來的,但也是存在this.props中,且設置的props能夠被所有的該組件類的實例共享。
例子:
二、getInitialState()
1、作用于組件實例,在組件實例創建時調用一次,用于初始化每個組件實例的state,返回值是一個對象,即this.state;
2、在改方法中設置state的初始值時,已經能夠訪問this.props了,也就是說,可以根據this.props中的屬性值來設置初始state(狀態)值。
例子:
三、componentWillMount()
1、作用于組件實例,在首次執行render()方法之前調用一次;
2、在這個方法中,即使通過setState()方法改變state也不會引起render()方法的再執行,但更改的state確實已經發生變化。
四、render()
1、render()是必須的方法,作用是創建一個虛擬的DOM(react的特性之一);
2、返回值可以是null、false或者一個頂級的組件,也就是說下列這種會報錯:
3、render()方法是一個純凈的方法,只能通過this.state和this,props訪問數據,不對state做更改,換句話說,render()方法只負責呈現。
五、componentDidMount()
1、componentDidMount()在真實的DOM被渲染出來時調用一次,在這個方法中調用this.setState()方法,會引起render()方法的再執行,也就是虛擬DOM的重新渲染(至于真實DOM會不會重渲染,由react判斷);
2、官方設計這個方法是用來加載外部的數據,或者處理一些其他副作用的代碼;
3、在這個方法中已經可以訪問真實的DOM了。
六、componentWillReceiveProps(nextProps)
1、每當父組件傳過來的prop發生變化時自動調用,新的prop存在nextProps,可以通過nextProps.[propName]訪問。
七、componentWillUpdate()
1、每當組件接受新的props或state后,重新渲染(即再執行render())方法之前調用,此時不允許更新props或state。
八、componentDidUpdate()
1、根據新的新的props或state,完成重新渲染后調用,每當組件根據新的props或state完成重新渲染后,都會被調用。
九、componentWillUnmount()
1、組件被移除之前被調用一次,可以做一些清理工作,比如在componentDidMount()方法中創建了定時器或者添加了事件的監聽器,都需要在這個方法中撤銷。