React 知識點小結(二):生命周期

React是單向數(shù)據(jù)流

組件初始化(initialization)階段:

constructor // 構造器 設置組件的初始化狀態(tài)

組件的掛載(Mounting)階段

componentWillMount // 即將載入dom
組件即將被渲染到頁面之前觸發(fā),此時可以進行開啟定時器、向服務器發(fā)送請求等操作

render
組件渲染

componentDidMount // 已經(jīng)載入dom 重要!?。?!
組件已經(jīng)被渲染到頁面中后觸發(fā):此時頁面中有了真正的DOM的元素,可以進行DOM相關的操作

組件的更新(update)階段:

componentWillReceiveProps // 即將接受參數(shù)
組件接收到屬性時觸發(fā)

shouldComponentUpdate // 判斷是否允許組件更新 true允許組件更新,false阻止組件更新
當組件接收到新屬性,或者組件的狀態(tài)發(fā)生改變時觸發(fā)。組件首次渲染時并不會觸發(fā)
一般我們通過該函數(shù)來優(yōu)化性能

componentWillUpdate // 即將更新
組件即將被更新時觸發(fā)

render
組件渲染

componentDidUpdate // 已經(jīng)更新
組件被更新完成后觸發(fā)。頁面中產(chǎn)生了新的DOM的元素,可以進行DOM操作

銷毀階段:

componentWillUnmount // 即將被銷毀
組件被銷毀時觸發(fā)。這里我們可以進行一些清理操作,例如清理定時器,取消Redux的訂閱事件 和 清除componentDidMount中手動創(chuàng)建的DOM元素等等。


React v16.4 的生命周期

React V16中 推出了Fiber,如果開啟 異步render,那么 React Fliber 將在兩個階段:
第一個階段Reconciliation Phase和第二階段Commit Phase.

在第一階段Reconciliation Phase,React Fiber會找出需要更新哪些DOM,這個階段是可以被打斷的;但是到了第二階段Commit Phase,那就一鼓作氣把DOM更新完,絕不會被打斷。

與此相關的,就牽扯到了 生命周期函數(shù)。所以在render前,可能會多次調用生命周期函數(shù)。具體如下:

第一階段可能會調用下面這些生命周期函數(shù),說是“可能會調用”是因為不同生命周期調用的函數(shù)不同。

componentWillMount
componentWillReceiveProps
shouldComponentUpdate
componentWillUpdate

下面這些生命周期函數(shù)則會在第二階段調用。

componentDidMount
componentDidUpdate
componentWillUnmount


React Fiber與生命周期函數(shù)

新的生命周期

getDerivedStateFromPropsgetSnapshotBeforeUpdate

getDerivedStateFromProps

static getDerivedStateFromProps(props, state) 在組件創(chuàng)建時和更新時的render方法之前調用,它應該返回一個對象來更新狀態(tài),或者返回null來不更新任何內(nèi)容。

getSnapshotBeforeUpdate

getSnapshotBeforeUpdate() 被調用于render之后,可以讀取但無法使用DOM的時候。它使您的組件可以在可能更改之前從DOM捕獲一些信息(例如滾動位置)。此生命周期返回的任何值都將作為參數(shù)傳遞給componentDidUpdate()。

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 作為一個合格的開發(fā)者,不要只滿足于編寫了可以運行的代碼。而要了解代碼背后的工作原理;不要只滿足于自己的程序...
    六個周閱讀 8,687評論 1 33
  • 原教程內(nèi)容詳見精益 React 學習指南,這只是我在學習過程中的一些閱讀筆記,個人覺得該教程講解深入淺出,比目前大...
    leonaxiong閱讀 2,954評論 1 18
  • 3. 組件生命周期 React嚴格定義了組件的生命周期,生命周期可能會經(jīng)歷如下三個過程: 裝載過程(Mount):...
    懷念不能閱讀 658評論 1 3
  • 40、React 什么是React?React 是一個用于構建用戶界面的框架(采用的是MVC模式):集中處理VIE...
    萌妹撒閱讀 1,196評論 0 1
  • 『贈我二大爺』 前幾天上了古詩三首,第二首是《贈劉景文》。第二天課間,堂正神秘兮兮的跑過來:...
    大書小香閱讀 470評論 0 8

友情鏈接更多精彩內(nèi)容