react(四)元件的生命週期

2021-08-08 01:38:06 字數 3088 閱讀 6386

元件的生命週期:

當元件第一次渲染時,依次呼叫的過程:

1、constructor【*】

(1)不是所有元件均會定義該函式

(2)定義該函式的目的:

this.state={}

例如,已有成員函式clickbtn,繫結this指向的方式可以是this.clickbtn=this.clickbtn.bind(this)

2、getinitalstate

已經過時的方法,不再推薦使用。

3、getdefaultproptyes

已經過時的方法,不再推薦使用。

例如,元件類名是carouse ,那麼指定props初始值的方式是carouse.defaultprops={}

4、componentwillmount

(1)通常不用定義,因為此時還沒有渲染出來任何東西,即使修改狀態也不會引發重新繪製,可將這裡需要定義的事情,都提前到constructor中。

(2)既可在瀏覽器端使用,又可在伺服器端使用

5、render【* * * *】

(1)render是乙個純函式,完全根據this.state和this.props來決定返回的結果,而不要產生任何***。

【render函式中去呼叫this.setstate無疑是錯誤的,因為乙個純函式不應該引起狀態的改變】

(2)render函式並不做實際的渲染動作,它只返回乙個jsx描述的結構,最終由react來操作渲染過程。

(3)當某些元件的作用不是渲染介面,或者元件的某些情況下選擇沒有東西可畫,那就讓render函式返回乙個null或者false。

6、componentdidmount【* * *】

(1)該函式的執行並不是在render函式被呼叫完之後立刻呼叫,而是在整個元件被裝載到了dom樹上之後才執行,即 react利用全部的render返回的jsx描述的結構進行了渲染之後 才執行。

(2)只能在瀏覽器端使用

(3)常用場景:

7、整個裝載過程舉例:

import react, from 'react';

export default class mount extends component

} // 1.2 getinitialstate

// 注意:es6方法定義的react元件是用不到的,等同於this.state

getinitialstate()

// 1.3 getdefaultprops

// 注意:es6方法定義的react元件是用不到的,等同於給類屬性defaultprops設定props初始值,mount.defaultprops

getdefaultprops()

// 1.4 componentwillmount

componentwillmount()

// 1.5 render【**】

render()

// 1.6 componentdidmount【***】

componentdidmount()

// 其他:

// 成員函式fn1

fn1()

}// 通過給元件mount 類 屬性defaultprops設定,用於props設定初始值

mount.defaultprops=;

為了提供更好的互動體驗,要使該元件隨著使用者的操作改變展現的內容。

依次呼叫的生命週期函式:

1、componentwillreceiveprops(nextprops)

(1)何時呼叫該函式?

只要是父元件的render函式被呼叫,在render函式裡面被渲染的子元件就會經歷更新的過程

不管父元件傳給子元件的props有沒有改變,都會觸發子元件的componentwillreceiveprops函式。

每個react元件都可以通過forceupdate函式強行引發依次重繪。

(2)形參nextprops代表:這一次渲染傳入的props值,是乙個物件。

(3)常用場景:

將引數nextprops和this.props做必要對比,只有兩者有變化時,才有必要呼叫this.setstate更新內部狀態。

2、shouldcomponentupdate(nextprops,nextstate) 【* * * *】

(1) 在更新過程中,react首先呼叫該函式,返回值是true,繼續更新過程;返回值是false,立刻停止更新過程,也就不會引發後續的渲染了。

(2)形參nextprops,nextstate代表:最新的props和state值。

(3)通過形參和this.props,this.state互相對比結果,返回布林值,決定是否要繼續更新過程。(預設是返回true,無論是否一樣,都會繼續更新過程)從而優化效能。

(4)通過this.setstate函式引發的更新過程,並不是立刻更新元件的state值,在執行到函式shouldcomponentupdate的時候,this.state依然是this.setstate函式執行之前的值。

3、componentwillupdate

4、render

同 裝載過程 中的render。

5、componentdidupdate

(1)既可在瀏覽器端,又可在伺服器端。不同於裝載過程中的componentdidmount。

但是,基本上不會在伺服器端呼叫該函式,如果呼叫了, 說明程式有錯誤,需改進。

(2)元件被更新時,在該函式中可執行其他ui庫**,如jquery**。

當react元件要從dom樹上刪除掉之前,該函式呼叫。

1、componentwillunmount

該函式中的工作通常和componentdidmount有關。

**注意:**當componentdidmount中用非react方法創造了一些dom元素,就需要在該函式中把這些創造的dom元素清理掉。

React(三) 元件的生命週期

react元件的生命週期分為三大部分 1 掛載 mount 我們把元件渲染,並且構造dom元素插入到頁面的過程稱為元件的掛載。元件掛載的過程 元件掛載先關函式,只在元件掛載的時候呼叫,在元件更新時不會執行 import react from react class test extends reac...

react 複習(2)元件的生命週期

當元件例項被建立並插入 dom 中時,其生命週期呼叫順序如下 constructor static getderivedstatefromprops static getderivedstatefromprops nextprops,prevstate nextprops 當傳入的type發生變化的...

react(一) 元件的生命週期

最近兄弟團隊讓我去幫忙優化兩個頁面,前端用的react全家桶,後端用的python,上一次寫react 都過去一年了,順著以前的的學習思路,再捋順一下react的要點 元件的生命週期就是reac的工作過程,就好比人有生老病死,自然界有日月更替,每個元件在網頁中也會有被建立 更新和刪除,如同有宣告的機...