元件的生命週期包含三個主要部分:
react提供生命週期方法,你可以在這些方法中放入自己的**。我們提供will方法,會在某些行為發生之前呼叫,和did方法,會在某些行為發生之後呼叫。
object
在元件被掛載之前呼叫。狀態化的元件應該實現這個方法,返回初始的state
資料。初始化
this.state
的值,只在元件裝載之前呼叫一次。如果是使用 es6 的語法,你也可以在建構函式中初始化狀態,比如:
getdefaultpropsclass counter extends component ;
} render()
}
只在元件建立時呼叫一次並快取返回的物件(即在
react.createclass
之後就會呼叫)。因為這個方法在例項初始化之前呼叫,所以在這個方法裡面不能依賴
this
獲取到這個元件的例項。在元件裝載之後,這個方法快取的結果會用來保證訪問
this.props
的屬性時,當這個屬性沒有在父元件中傳入(在這個元件的 jsx 屬性裡設定),也總是有值的。如果是使用 es6 語法,可以直接定義
defaultprops
這個類屬性來替代,這樣能更直觀的知道default props
是預先定義好的物件值:componentwillmount()counter.defaultprops = ;
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.props
和nextprops
,然後使用this.setstate()
來改變state
。在初始化渲染的時候,該方法不會呼叫。
shouldcomponentupdate(object nextprops, object nextstate): booleancomponentwillreceiveprops: function(nextprops) );
}
當元件做出是否要更新dom的決定的時候被呼叫。
在接收到新的
props
或者state
,將要渲染之前呼叫。該方法在初始化渲染的時候不會呼叫,在使用 forceupdate 方法的時候也不會。如果確定新的
props
和state
不會導致元件更新,則此處應該返回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...