一. react16當前生命周期
- componentWillMount
render前,所以setState不會重新渲染,服務端渲染唯一調用,推薦用constructor代替之
- render
- componentDidMount
render后,調用setState會重新渲染,頁面可交互,可以請求數據
- componentWillRecieveProps(nextProps)
已掛載組件接收到新props觸發
- shouldComponentUpdate(nextProps, nextState)
在接收到新的props或state時是否重新渲染,默認返回true;首次渲染或forceUpdate時不會觸發;
- componentWillUpdate(nextProps, nextState)
如果shouldComponentUpdate返回false,update相關的函數都不會觸發;不要使用setState;
- componentDidUpdate(nextProps, nextState)
- componentWillUnmount
卸載組件
二. 由於未來采用異步渲染機制,所以即將在17版本中去掉的生命周期鈎子函數
- componentWillMount
- componentWillRecieveProps
- componentWIllUpdate
三. 新增兩個
- static getDerivedStateFromProps
會在初始化和update時觸發,用於替換componentWillReceiveProps,可以用來控制 props 更新 state 的過程;它返回一個對象表示新的 state;如果不需要更新,返回 null 即可
- getSnapshotBeforeUpdate
用於替換 componentWillUpdate,該函數會在update后 DOM 更新前被調用,用於讀取最新的 DOM 數據,返回值將作為 componentDidUpdate 的第三個參數
四. 建議用法
class A extends React.Component {
// 用於初始化 state
constructor() {}
// 用於替換 `componentWillReceiveProps` ,該函數會在初始化和 `update` 時被調用
// 因為該函數是靜態函數,所以取不到 `this`
// 如果需要對比 `prevProps` 需要單獨在 `state` 中維護
static getDerivedStateFromProps(nextProps, prevState) {}
// 判斷是否需要更新組件,多用於組件性能優化
shouldComponentUpdate(nextProps, nextState) {}
// 組件掛載后調用
// 可以在該函數中進行請求或者訂閱
componentDidMount() {}
// 用於獲得最新的 DOM 數據
getSnapshotBeforeUpdate() {}
// 組件即將銷毀
// 可以在此處移除訂閱,定時器等等
componentWillUnmount() {}
// 組件銷毀后調用
componentDidUnMount() {}
// 組件更新后調用
componentDidUpdate() {}
// 渲染組件函數
render() {}
// 以下函數不建議使用
UNSAFE_componentWillMount() {}
UNSAFE_componentWillUpdate(nextProps, nextState) {}
UNSAFE_componentWillReceiveProps(nextProps) {}
}