在組件的整個生命周期中,隨著該組件的props或者state發(fā)生改變黔攒,其DOM表現(xiàn)也會有相應的變化趁啸。一個組件就是一個狀態(tài)機,對于特定地輸入亏钩,它總返回一致的輸出莲绰。
組件的生命周期可分成三個狀態(tài):
- Mounting:已插入真實 DOM
- Updating:正在被重新渲染
- Unmounting:已移出真實 DOM
第一個狀態(tài)(實例化期)
- getDefaultProps: 對于每個組件實例來講欺旧,這個方法只會調用一次姑丑,可用于設置默認的 props值
- getInitialState:這個方法的調用有且只有一次,用來初始化每個實例的 state
- componentWillMount:render 方法調用之前修改 state 的最后一次機會,可以用來將props的參數(shù)設置到state里面去
- componentDidMount:
- 該方法被調用時辞友,已經(jīng)渲染出真實的 DOM栅哀,可以再該方法中通過 this.getDOMNode() 訪問到真實的 DOM(推薦使用 ReactDOM.findDOMNode())
- 不會在服務端被渲染的過程中調用(可以用來獲取canvas的id/ref等)
- 頁面已經(jīng)被加載完震肮,用來監(jiān)聽頁面
render(渲染頁面)
第二個狀態(tài)(存在期)
- componentWillReceiveProps(nextProps):
- 在這個方法里更新 state,以觸發(fā) render 方法重新渲染組件
- 用來監(jiān)聽props的變化(需要監(jiān)聽變化的值存入state里面對比)
if(nextProps .x !== this.state.x ){
}
- shouldComponentUpdate:如果你確定組件的 props 或者 state 的改變不需要重新渲染,可以通過在這個方法里通過返回 false 來阻止組件的重新渲染留拾,返回 `false 則不會執(zhí)行 render 以及后面的 componentWillUpdate戳晌,componentDidUpdate 方法
- componentWillUpdate:
- 在組件接收到了新的 props 或者 state 即將進行重新渲染前,componentWillUpdate(object nextProps, object nextState) 會被調用
- 不要在此方面里再去更新 props 或者 state
第三個狀態(tài)(銷毀期)
- componentDidUpdate:在組件重新被渲染之后痴柔,componentDidUpdate(object prevProps, object prevState) 會被調用沦偎。可以在這里訪問并修改 DOM
- componentWillUnmount:
- 每當React使用完一個組件咳蔚,這個組件必須從 DOM 中卸載后被銷毀豪嚎,此時 componentWillUnmout 會被執(zhí)行,完成所有的清理和銷毀工作谈火,在 componentDidMount 中添加的任務都需要再該方法中撤銷侈询,如創(chuàng)建的定時器或事件監(jiān)聽器
- 刷新瀏覽器時沒有卸載組件,只有離開頁面才會卸載
- 離開頁面時卸載組件糯耍,清空state里面的值
componentWillUnmount(){
//重寫組件的setState方法扔字,直接返回空
this.setState = (state,callback)=>{
return;
};
}
參考:https://segmentfault.com/a/1190000004168886?utm_source=tag-newest#articleHeader0