React Native生命週期

2022-07-14 11:15:26 字數 4159 閱讀 4631

一、前言

react的使用者頁面的構建只要思想是通過構建可復用的元件來實現。那麼什麼叫元件?

所謂的元件就是有限狀態機,通過狀態渲染對應的介面了,和ios一樣,react的每個元件也有對應的生命週期,它規定了元件的狀態和方法需要在什麼階段進行改變和執行。

當呼叫react.createclass()建立乙個元件類時,你應該提供乙個包含有render方法以及可選的其他生命週期方法的 規範(specifications)物件。

1.1什麼是有限狀態機?

有限狀態機,表示有限個狀態以及在這些狀態之間的轉移和動作等行為的模型。

狀態機,能夠記住目前所處的狀態,根據當前的狀態可以做出相應的決策,並且在進入不同的狀態時,可以做不同的操作。就像特別簡單的乙個例子:乙個人的所處的狀態,決定了不同的操作,如果乙個人進入餓的狀態,那麼接下來他要進行的操作就是喝水。

react 正是利用這一概念,通過管理狀態來實現對元件的管理。

例如:某個元件有顯示和隱藏兩個狀態,通常會設計兩個方法show()和hide()來實現切換;而 react 只需要設定狀態setstate()即可實現。

二。react生命週期

簡單當首次裝載元件時,按順序執行 getdefaultprops、getinitialstate、componentwillmount、render 和 componentdidmount;的說元件分為三種狀態:掛載 更新 和解除安裝。

根據不同的狀態詳細分為:

裝載元件、 解除安裝元件、重新裝載元件、再次渲染元件時,元件接受到更新狀態。

三。為什麼會是如此的執行順序呢?自定義元件的生命週期主要主要通過三種狀態來進行管理:掛載 更新 和解除安裝。三種狀態對應三種方法:mountcomponent、updatecomponent、unmountcomponent。

3.1掛載

createclass 建立自定義元件的入口方法,負責管理生命週期中的 getdefaultprops。getdefaultprops 方法只執行一次,這樣所有例項初始化的 props 將會被共享。

getdefaultprops

該函式用於初始化一些預設的屬性,通常會將固定的內容放在這個函式中,進行初始化和賦值。在元件中,可以利用this.props獲取在這裡初始化它的屬性,由於元件初始化後,再次使用該元件不會呼叫getdefaultprops函式,所以元件自己不可以自己修改props。

mountcomponent 負責管理生命週期中的getinitialstate、componentwillmount、render 和 componentdidmount。

該函式是用於對元件的一些狀態進行初始化;

由於該函式不同於getdefaultprops,在以後的過程中,會再次呼叫,所以可以將控制控制項的狀態的一些變數放在這裡初始化,如控制項上顯示的文字,可以通過this.state來獲取值,通過this.setstate來修改state值, 比如:

this.setstate({

activepage: activepage,

currentx: contentoffsetx

componentwillmount

render

render是乙個元件中必須有的方法,本質上是乙個函式,並返回jsx或其他元件來構成dom,和android的xml布局類似,注意:只能返回乙個頂級元素;

此外,在render函式中,只可通過this.state和this.props來訪問在之前函式中初始化的資料值 。

componentdidmount

在呼叫了render方法後,元件載入成功並被成功渲染出來以後,所要執行的後續操作,一般會在這個函式中處理網路請求等載入資料的操作;

3.2更新

如果前後元素不一致說明需要進行元件更新。

updatecomponent 負責管理生命週期中的componentwillreceiveprops、shouldcomponentupdate、componentwillupdate、render 和 componentdidupdate。

注意:禁止在shouldcomponentupdatecomponentwillupdate中呼叫setstate,會造成迴圈呼叫,直至耗光瀏覽器記憶體後崩潰。

componentwillreceiveprops

指父元素對元件的props或state進行了修改

shouldcomponentupdate

一般用於優化,可以返回false或true來控制是否進行渲染

componentwillupdate

元件重新整理前呼叫,類似componentwillmount

componentdidupdate

更新後的hook

3.3解除安裝

unmountcomponent 負責管理生命週期中的componentwillunmount。

首先將狀態設定為unmounting,若存在 componentwillunmount,則執行;如果此時在 componentwillunmount 中呼叫setstate,是不會觸發 rerender。更新狀態為null,完成元件解除安裝操作。

四。常用的知識點

4.1setstate 更新機制

setstate的原理?

當呼叫setstate時,會對 state 以及 _pendingstate 更新佇列進行合併操作,但其實真正更新 state 的幕後**是

replacestate

replacestate 會先判斷當前狀態是否為mounting,如果不是即會呼叫reactupdates.enqueueupdate執行更新。

當狀態不為mounting或receiving_props時,performupdateifnecessary 會獲取 _pendingelement、_pendingstate、_pendingforceupdate,並呼叫 updatecomponent 進行元件更新。

如果在 shouldcomponentupdate 或 componentwillupdate 中呼叫setstate,此時的狀態已經從receiving_props -> null,則 performupdateifnecessary 就會呼叫 updatecomponent 進行元件更新,但 updatecomponent 又會呼叫 shouldcomponentupdate 和 componentwillupdate,因此造成迴圈呼叫,使得瀏覽器記憶體佔滿後崩潰。

ReactNative 生命週期

1 建立階段 getdefaultprops 處理props的預設值 在react.createclass呼叫 在建立類的時候被呼叫 this.props該元件的預設屬性 2 例項化階段 reactdom.render 自定義元件 啟動後開始例項化 getinitialstate 初始化元件的sta...

React Native 元件生命週期

1.元件生命週期 元件的生命週期包含三個主要部分 掛載 元件被插入到dom中。更新 元件被重新渲染,查明dom是否應該重新整理。移除 元件從dom中移除。react提供生命週期方法,你可以在這些方法中放入自己的 我們提供will方法,會在某些行為發生之前呼叫,和did方法,會在某些行為發生之後呼叫。...

React Native元件生命週期

getdefaultprops 該函式用於初始化一些預設的屬性,通常會將固定的內容放在這個函式 中進行初始化和賦值 在元件建立之前,會先呼叫 getdefaultprops 初始化一些屬性,由於元件初始化後,再次使用該元件不會呼叫getdefaultprops 所以元件自己不可以自己修改props。...