React的生命周期函數(shù):在某一時(shí)刻組件會(huì)自動(dòng)調(diào)用執(zhí)行的函數(shù)。
下面分階段給出各個(gè)生命周期函數(shù)角撞。
組件初始化(Initialization)階段
constructor(props)
組件掛載(Mounting)階段
componentWillMount()
在組件即將被掛載到頁(yè)面時(shí)執(zhí)行
render()
組件掛載時(shí)執(zhí)行
componentDidMount()
組件被掛載到頁(yè)面后自動(dòng)執(zhí)行
組件更新(Updation)階段
props呛伴、states發(fā)生變化時(shí)進(jìn)入該階段
如果:
一個(gè)組件要從父組件接收參數(shù) && 該組件已經(jīng)存在于父組件中,則在其
執(zhí)行shouldComponentUpdate()之前谒所,執(zhí)行:
componentWillReceiveProps()
shouldComponentUpdate()
組件需要更新嗎热康?返回true,則組件更新劣领,否則不更新褐隆;
componentWillUpdate()
組件被更新前執(zhí)行,前提是shouldComponentUpdate()返回了true剖踊;
render()
重新渲染庶弃,更新組件;
componentDidUpdate()
組件更新完成后執(zhí)行德澈。
組件卸載(UnMounting)階段
componentWillUnmount()
- 該組件即將被移除時(shí)執(zhí)行
render() 函數(shù)必須定義歇攻,因?yàn)樗贑omponent中并沒(méi)有被實(shí)現(xiàn)。
生命周期函數(shù)的應(yīng)用場(chǎng)景:
1. 用shouldComponentUpdate() 避免重復(fù)渲染
//避免無(wú)謂渲染梆造,提升性能
shouldComponentUpdate(nextProps, nextState) {
if(nextProps.content !== this.props.content) {
return true;
} else {
return false;
}
}
2. componentDidMount()
異步Ajax請(qǐng)求不適合被寫(xiě)在render()中缴守,因?yàn)槟菢訒?huì)導(dǎo)致多次請(qǐng)求,
它更適合被放在componentDidMount()
中镇辉。
積累React中性能優(yōu)化的Tips:
- this綁定放在組件的constructor中(尚未詳細(xì)講解)屡穗;
- setState() 內(nèi)置了優(yōu)化的方式(異步);
- 虛擬DOM內(nèi)部?jī)?yōu)化了比對(duì)和重新渲染的效率忽肛;
- 生命周期函數(shù)的使用村砂;