1. React16廢棄的生命周期有3個will:
componentWillMount
componentWillReceiveProps
componentWillUpdate
廢棄的原因,是在React16的Fiber架構中,調和過程會多次執行will周期,不再是一次執行,失去了原有的意義。此外,多次執行,
在周期中如果有setState或dom操作,會觸發多次重繪,影響性能,也會導致數據錯亂
2. componentWillReceiveProps的執行時機
1. 在props變化時觸發
2. 在父組件導致子組件rerender,即使props沒有變化,也觸發
componentWillReceiveProps本身是存在一些問題的。
3. React16的2個新的生命周期
getDerivedStateFromProps
getSnapshotBeforeUpdate
3.1 getDerivedStateFromProps的用法
這個周期很難用:
1. 觸發時機頻繁,16.3是在props變化時觸發,16.4則改為在每次組件渲染器調用,
即無論props變化,組件自己setState,父組件render 都會觸發
2. 靜態方法,本意是隔離訪問組件實例,卻造成訪問組件的數據和方法十分不便,難以進行數據比較
3. 不能setState,而是返回一個對象來更新state,使用不便,也可能觸發多次更新狀態
3.2 getSnapshotBeforeUpdate
在render之后,更新dom之前,state已更新。可以用來讀取dom,強制用戶只能在mount階段讀取dom。
getSnapshotBeforeUpdate這個周期在Fiber架構中,只會調用一次,實現了類似willMount的效果。
