React生命週期
先說一下react 生命週期的變動(目前react 最新版本是v16.4.2):
以V6.3爲中間點,v16.3之後的版本最大的變動莫過於生命週期去掉了以下三個
componentWillMount (render之前執行,只執行一次)
componentWillReceiveProps
componentWillUpdate (每次更新,render之前執行)
同時加了兩個新的生命週期函數
getDerivedStateFromProps
getSnapshotBeforeUpdate
當然,這個更替是緩慢的,在整個16版本里都能無障礙的使用舊的生命週期,但值得注意的是,舊的生命週期(unsafe)不能和新的生命週期同時出現在一個組件,否則會報錯 “你使用了一個不安全的生命週期”
具體的生命週期函數及其應用場景
constructor
用於初始化內部狀態,唯一可以直接修改state的地方
getDerivedStateFromProps
1.當state需要從props 初始化使用
2.儘量不要使用:維護兩者狀態一致性會增加複雜度
3.每次render都會調用
4.典型場景:表單控件獲取默認值
componentDidMount
1:UI渲染完成後調用
2:只執行一次
3:典型場景:獲取外部資源
componentWillUnmount
1.組件移除時被調用
2.典型場景:資源
getSnapshotBeeforeUpdate
1.在頁面render 之前調用,state已更新
2.典型場景:獲取render之前的Dom
componentDidUpdate
1.每次UI更新時被調用
2.典型場景:頁面需要根據props 變化重新獲取
shouldComponentUpdate
1.決定VIrtual Dom 是否要重繪
2.一般可以由PureComponent自動實現
3.典型場景:性能提升