元件從被建立到被銷毀的過程稱為元件的生命週期。通常,元件的宣告週期可以分為三個階段:掛載階段、更新階段、解除安裝階段。
1、掛載階段
這個階段元件被建立,執行初始化,並被掛載到dom中,完成元件的第一次渲染。依次呼叫的生命週期方法有:constructor、componentwillmount、render、componentdidmount。
constructor:這是es6 class的構造方法,元件被建立時,會首先呼叫元件的構造方法。這個構造方法接收乙個props引數,props是從父元件中傳入的屬性物件,如果父元件沒有傳入屬性而元件自身定義了預設屬性,那麼這個props指向就是元件的預設屬性。你必須在這個方法中首先呼叫super(props)才能保證props被傳入元件中。constructor通常用於初始化元件的state已經繫結事件處理方法等工作。
componentwillmount:在元件被掛載到dom前使用一次。實際很少使用,在該方法中執行的工作都可以提前到constructor中。
render:定義元件時唯一必要的方法。在這個方法中,根據元件的props和state返回乙個react元素,用於描述元件的ui。render是乙個純函式,在這個方法中不能執行任何有***的操作。
componentdidmount:元件被掛載到dom後呼叫,且只會被呼叫一次。可以在此進行資料請求。
2、更新階段
元件被掛載到dom後,元件的props和state可以引起元件更新。props引起的元件更新,本質上是由渲染該元件的父元件引起的,也就是當父元件的render方法被呼叫時, 元件會發生更新過程,這個時候,元件props的值可能發生改變,也可能不變,因為父元件可以使用相同的物件和值為元件的props賦值。但是,無論props是否改變,父元件render方法每一次呼叫,都會導致元件更新。state引起的元件更新,是通過呼叫this.setstate修改元件state來觸發的。元件更新階段,依次呼叫的生命週期方法有:componentwillreceiveprops、shouldcomponentupdate、componentwillupdate、render、componentdidupdate
**componentwillreceiveprops(nextprops)**這個方法只在props引起的元件更新的過程中,才會被呼叫。
**shouldcomponentupdate(nextprops,nextstate)**這個方法決定元件是否繼續執行更新過程。一般通過比較nextprops、nextstate和元件當前的props、state決定這個方法的返回結果。這個方法可以用來減少元件不必要的渲染,從而優化元件的效能。
**componentwillupdate(nextprops,nextstate)**這個方法在元件render呼叫前執行,可以作為元件更新發生前執行某些工作的地方,一般很少用到。
componentdidupdate(prevprops,prevstate)元件更新後被呼叫,可以作為操作更新後的dom的地方。
3、解除安裝階段
元件從dom中被解除安裝的過程,這個過程只有乙個生命週期方法:componentwillunmount
這個方法在元件被解除安裝前呼叫,可以在這裡執行一些清理工作,比如清除元件中使用的定時器,清除componentdidmount中手動建立的dom元素等,以避免引起記憶體洩露。
React 生命週期 生命週期方法
生命週期 掛載 更新 解除安裝 元件被建立 執行初始化 並被掛載到dom中,完成元件的第一次渲染 constructor props getderivedstatefromprops props,state render componentdidmount 元件被建立時會首先呼叫元件的構造方法,接受...
react 生命週期
首次例項化 例項化完成後的更新 元件已存在時的狀態改變 生命週期共提供了10個不同的api。1.getdefaultprops 作用於元件類,只呼叫一次,返回物件用於設定預設的props,對於引用值,會在例項中共享。2.getinitialstate 作用於元件的例項,在例項建立時呼叫一次,用於初始...
react生命週期
盜圖一張 第一次進入頁面列印結果 1 parent constructor 2 parent conponentwillmount 3 parent render 4 initial render constructor 5 componentwillmount 6 render 7 compone...