組件掛載階段
constructor
constructor
的執(zhí)行在最前面蹦渣,這時組件還尚未掛載至頁面,所以constructor
中不可直接使用setState
首先是
constructor
的執(zhí)行藏古,同一個類組件對象只會創(chuàng)建一次,不會因為組件的重新渲染而再次創(chuàng)建,所以constructor
也就只會執(zhí)行一次
componentWillMount(React16之后被移除)
和該函數(shù)的名字一樣祝懂,她的執(zhí)行周期就是組件即將被掛載之前顽耳,構(gòu)造函數(shù)執(zhí)行之后
同構(gòu)造函數(shù)一樣坠敷,只會運行一次
避免使用
setState
static getDerivedStateFromProps(React16之后添加)
- 官方不推薦使用
render
- 調(diào)用
React.createElement
創(chuàng)建并返回一個虛擬DOM
,將其掛載至虛擬DOM
樹上射富,并渲染
componentDidMount
組件完成掛載膝迎,虛擬
DOM
渲染結(jié)束之后,僅執(zhí)行一次常用于數(shù)據(jù)獲取
組件更新階段
- 組件掛載徹底完成胰耗,接下來就是屬性或狀態(tài)的變化導(dǎo)致的組件更新階段
componentWillReceiveProps(React16之后被移除)
組件即將接收到新的屬性值限次,即使這個屬性值并沒有改變
參數(shù)為新的屬性對象
props
不推薦使用
static getDerivedStateFromProps(React16之后添加)
官方不推薦使用
發(fā)生在組件接收了新的屬性
props
或狀態(tài)state
之后,shouldComponentUpdate
之前接收兩個參數(shù)柴灯,
props
卖漫,state
,分別為新接收的屬性和狀態(tài)由于是靜態(tài)函數(shù)弛槐,所以函數(shù)體內(nèi)的
this
指向構(gòu)造函數(shù)可返回
null
懊亡,不改變當(dāng)前狀態(tài),也可返回對象乎串,用該對象覆蓋之前的狀態(tài)
shouldComponentUpdate
發(fā)生在組件接收了新的屬性
props
或狀態(tài)state
之后店枣,即使她們并沒有改變作用是決定
React
是否要重新渲染該組件若返回
true
速警,則重新渲染,false
則不重新渲染鸯两,默認(rèn)為true
兩個參數(shù)闷旧,
nextProps
,nextState
钧唐,分別對應(yīng)新接收的屬性和狀態(tài)可用于性能優(yōu)化
componentWillUpdate(React16之后被移除)
發(fā)生于組件即將重新渲染之前
兩個參數(shù)忙灼,
nextProps
,nextState
钝侠,分別對應(yīng)新接收的屬性和狀態(tài)
render
- 開始重新渲染
getSnapshotBeforeUpdate(React16之后添加)
真實
DOM
構(gòu)建結(jié)束该园,但還未實際渲染至頁面前通常用于一些
dom
操作返回值會作為
componentDidUpdate
的第三個參數(shù)
componentDidUpdate
發(fā)生于組件重新渲染完成之后
兩個參數(shù),
prevProps
帅韧,prevState
里初,分別對應(yīng)屬性和狀態(tài)改變之前的值這個函數(shù)里一般會進(jìn)行一些
dom
的操作,改變元素
componentWillUnMount
發(fā)生于組件即將被銷毀之前
常用于銷毀一些該組件依賴的資源忽舟,例如計時器