React元件生命週期

2021-09-18 03:51:51 字數 3703 閱讀 3724

元件的生命週期包含三個主要部分:

react提供生命週期方法,你可以在這些方法中放入自己的**。我們提供will方法,會在某些行為發生之前呼叫,和did方法,會在某些行為發生之後呼叫。

object在元件被掛載之前呼叫。狀態化的元件應該實現這個方法,返回初始的state資料。

初始化this.state的值,只在元件裝載之前呼叫一次。

如果是使用 es6 的語法,你也可以在建構函式中初始化狀態,比如:

class counter extends component ;

} render()

}

getdefaultprops

只在元件建立時呼叫一次並快取返回的物件(即在react.createclass之後就會呼叫)。

因為這個方法在例項初始化之前呼叫,所以在這個方法裡面不能依賴this獲取到這個元件的例項。

在元件裝載之後,這個方法快取的結果會用來保證訪問this.props的屬性時,當這個屬性沒有在父元件中傳入(在這個元件的 jsx 屬性裡設定),也總是有值的。

如果是使用 es6 語法,可以直接定義defaultprops這個類屬性來替代,這樣能更直觀的知道default props是預先定義好的物件值:

counter.defaultprops = ;
componentwillmount()

componentwillmount()只會在裝載之前呼叫一次,在render之前呼叫,你可以在這個方法裡面呼叫setstate改變狀態,並且不會導致額外呼叫一次render

render()

組裝生成這個元件的html結構(使用原生html標籤或者子元件),也可以返回null或者false,這時候reactdom.finddomnode(this)會返回null

componentdidmount()

componentdidmount()在掛載結束之後馬上被呼叫。只會在裝載完成之後呼叫一次,在 render 之後呼叫,從這裡開始可以通過reactdom.finddomnode(this)獲取到元件的 dom 節點。

componentwillreceiveprops(object nextprops)

當乙個掛載的元件接收到新的props的時候被呼叫。該方法應該用於比較this.propsnextprops,然後使用this.setstate()來改變state

在初始化渲染的時候,該方法不會呼叫。

componentwillreceiveprops: function(nextprops) );

}

shouldcomponentupdate(object nextprops, object nextstate): boolean

當元件做出是否要更新dom的決定的時候被呼叫。

在接收到新的props或者state,將要渲染之前呼叫。該方法在初始化渲染的時候不會呼叫,在使用 forceupdate 方法的時候也不會。

如果確定新的propsstate不會導致元件更新,則此處應該返回false

shouldcomponentupdate: function(nextprops, nextstate)
如果shouldcomponentupdate返回false,則render()將不會執行,直到下一次state改變。

componentwillupdate(object nextprops, object nextstate)

在更新發生之前被呼叫。你可以在這裡呼叫this.setstate()

componentdidupdate(object prevprops, object prevstate)

在更新發生之後呼叫。

componentwillunmount()

在元件移除和銷毀之前被呼叫。清理工作應該放在這裡。比如無效的定時器,或者清除在 componentdidmount 中建立的 dom 元素。

getdomnode()

domelement可以在任何掛載的元件上面呼叫,用於獲取乙個指向它的渲染dom節點的引用。

forceupdate()

當你知道一些很深的元件state已經改變了的時候,可以在該元件上面呼叫,而不是使用this.setstate()

完整例項展示

var button = react.createclass(;

},setnewnumber: function() )

},render: function ()

})var content = react.createclass(,

componentdidmount:function() ,

componentwillreceiveprops:function(newprops) ,

shouldcomponentupdate:function(newprops, newstate) ,

componentwillupdate:function(nextprops, nextstate) ,

componentdidupdate:function(prevprops, prevstate) ,

componentwillunmount:function() ,

render: function ()

});reactdom.render(

,document.getelementbyid('example')

);

生命週期

呼叫次數

能否使用setsate()

getdefaultprops

1(全域性呼叫一次)

否getinitialstate1否

componentwillmount1是

render

>=1

否componentdidmount1是

componentwillreceiveprops

>=0

是shouldcomponentupdate

>=0

否componentwillupdate

>=0

否componentdidupdate

>=0

否componentwillunmount1否

React元件生命週期

元件的所有狀態結合起來就成了元件的生命週期。即 初始化階段 執行中階段 銷毀階段。不同生命週期內可以自定義的函式 初始化階段 getdefaultprops 獲取預設屬性,只呼叫一次,是在createclass之後呼叫的。例項之間共享引用 getinitialstate 初始化每個例項的特有初始化狀...

React元件生命週期

首次例項化 例項化完成後的更新 元件已存在時的狀態改變 生命週期共提供了10個不同的api。1.getdefaultprops 作用於元件類,只呼叫一次,返回物件用於設定預設的props,對於引用值,會在例項中共享。2.getinitialstate 作用於元件的例項,在例項建立時呼叫一次,用於初始...

React 元件生命週期

在本章節中我們將討論 react 元件的生命週期。元件的生命週期可分成三個狀態 生命週期的方法有 這些方法的詳細說明,可以參考官方文件。以下例項在 hello 元件載入以後,通過 componentdidmount 方法設定乙個定時器,每隔100毫秒重新設定元件的透明度,並重新渲染 varhello...