掛載階段html
constructor
構造函數react
componetWillMount
組件初始化渲染前調用web
render
組件渲染面試
componentDidMount
組件掛載到DOM
後調用瀏覽器
更新階段網絡
componentWillReceiveProps
組件將要接收新props
前調用shouldComponentUpdate
組件是否須要更新componentWillUpdate
組件更新前調用render
組件渲染componentDidUpdate
組件更新後調用卸載階段異步
componentWillUnmount
組件卸載前調用掛載階段函數
constructor
構造函數,若是不初始化 state 或不進行方法綁定,則不須要爲 React 組件實現構造函數。性能
static getDerivedStateFromProps(props, state)
會在調用 render 方法以前調用,而且在初始掛載及後續更新時都會被調用。它應返回一個對象來更新 state,若是返回 null 則不更新任何內容。code
render
componentDidMount
組件掛載到DOM
後調用。在這裏能夠直接調用 setState()
。它將觸發額外渲染,但此渲染會發生在瀏覽器更新屏幕以前。從而保證了即便在render()
兩次調用的狀況下,用戶也不會看到中間狀態。但它會致使性能問題,因此要謹慎使用。
更新
static getDerivedStateFromProps
shouldComponentUpdate
render
getSnapShotBeforeUpdate
在最近一次渲染輸出(提交到 DOM 節點)以前調用。它使組件能在發生更改以前從 DOM 捕獲一些信息(例如,滾動位置)。它的任何返回值將做爲參數傳遞給componentDidUpdate
。componentDidUpdate
組件更新後調用,首次渲染不會執行此方法。在這裏直接調用setState()
時,必須將setState()
包裹在一個條件語句裏,不然會致使死循環。它還會致使額外的從新渲染,雖然用戶不可見,但會影響組件性能。卸載
componentWillUnmount
這裏不該調用setState()
,由於組件不會從新渲染。錯誤處理
static getDerivedStateFromError
在後代組件拋出錯誤後被調用,將拋出的錯誤做爲參數,並返回一個值以更新 state。componentDidCatch
componentWillMount
、componentWillReceivepPops
和componentWillUpdate
?componentWillMount
:異步渲染機制可能會致使單個組件實例能夠屢次調用該方法。不少開發着目前會將事件綁定、異步請求等寫在componentWillMount
中,一旦異步渲染時componentWillMount
被屢次調用,將會致使:
componentWillMount
會被調用,可是會因忽略異步獲取的數據致使 IO 資源被浪費。componentWillUpdate
的場景是配合componentDidUpdate
,分別獲取 rerender 先後的視圖狀態,進行必要的處理。但隨着 suspense、time slicing、異步渲染等機制的到來,render 過程能夠被分割成屢次完成,還能夠被暫停甚至回溯,這致使**componentWillUpdate
和componentDidUpdate
執行先後可能會間隔很長時間**,足夠使用戶進行交互操做更改當前組件的狀態,這樣可能會致使難以追蹤的 bug。參考: