原文:How to use React Lifecycle Methodsjavascript
大致上分三類java
componentWillMount()
複製代碼
當 React 渲染一個組件的是你,首先進入該方法。react
Note:componentWillMount()
是惟一一個在render()
以前調用的生命週期方法。所以是在服務端渲染中惟一被調用的方法。網絡
由於componentWillMount()
將被刪除,因此官方推薦使用constructor()
替代該方法fetch
**Update:**該方法應該在新的代碼中避免使用動畫
能夠在該方法中使用this.setState()
可是不必定觸發從新渲染。this
componentDidMount()
複製代碼
當該方法被調用時候,React 已經渲染了組件而且將組件插入 DOM。所以若有有任何依賴於 DOM 的初始化,應該放在這裏。spa
該方法中可使用this.setState()
方法,它將觸發從新渲染。code
componentWillReceiveProps(nextProps)
複製代碼
當組件接收到新的props
,該方法會首先被調用,可是須要注意一點,即便props
並無發生改變,該方法也會被調用,因此使用該方法的時候要確保比較this.props
和nextProps
,避免沒必要要的渲染。component
Update:componentWillReceiveProps
將被移除,使用新的static getDerivedStateFromProps
代替。
static getDerivedStateFromProps(props, state)
複製代碼
每次render
都會調用該方法——即便props
沒有發生變化。因此要謹慎使用。
shouldComponentUpdate(nextState, nextProps)
複製代碼
有些時候須要避免沒必要要的渲染,可使用該方法。返回false
意味着 React 不執行componentWillUpdate()
,render()
,componentDidUpdate()
。
該方法在初始化時候不執行。
**Note:**根據 React 文檔,React 可能將shouldComponentUpdate
視作提示而不是嚴格的根據它的返回結果決定是否執行,也就是說可能出現shouldComponentUpdate
返回false
,可是仍是發生從新渲染。
在該方法中不能夠設置setState
。
如前所述,該方法可能有有問題。React 官方提供了另外一個解決辦法,因此若是發現某個組件慢,可使用React.PureComponent
替代React.component
,它將對props
和state
提供一個淺層對照。
componentWillUpdate(nextProps, nextState)
複製代碼
該方法在被渲染前調用。shouldComponentUpdate
在新的props
進入組件或者state
改變的時候調用。
該方法在初始渲染時候不被調用。
Update:shouldComponentUpdate
即將被移除。
在該方法中不能調用setState
。
shouldComponentUpdate
方法在render()
前會被準確調用,因此在該方法中作任何跟 DOM 相關的操做是不合適的,由於很快會過時。
常見的用例有:
state
的變化設置變量getSnapshotBeforeUpdate(prevProps, prevState)
複製代碼
該方法在 React 16.3 被添加而且它配合componentDidUpdate
。該方法應該覆蓋了舊方法shouldComponentUpdate
的全部用例。
getSnapshotBeforeUpdate
在元素被渲染並寫入 DOM 以前調用,這樣,你在 DOM 更新前捕獲 DOM 信息(例如:滾動位置)。
應該返回一個snapshot
值或null
,不管返回什麼,shouldComponentUpdate
均可以接收到snapshot
參數。
若是想要得到一個 list 或者一個聊天窗口中的滾動位置,能夠在getSnapshotBeforeUpdate
中取到這些信息。而後將滾動信息做爲snapshot
值返回。這容許在更新DOM後在componentDidUpdate
中設置正確的滾動位置。
componentDidUpdate(prevProps, prevState, snapshot)
複製代碼
React 更新組件後,調用componentDidUpdate
。該方法在初始渲染時候不會被調用。
若是組件更新後須要操做 DOM,可使用該方法。
componentWillUnmount()
複製代碼
在卸載,銷燬組件以前調用該方法。
在卸載組件時候不能設置 State
使用該方法清理 actions。
componentDidMount
或其餘地方添加的事件監聽componentDidMount
中建立的 DOM 元素