react(一) 元件的生命週期

2022-04-25 06:00:54 字數 2492 閱讀 1345

最近兄弟團隊讓我去幫忙優化兩個頁面,前端用的react全家桶,後端用的python,上一次寫react**都過去一年了,順著以前的的學習思路,再捋順一下react的要點

元件的生命週期就是reac的工作過程,就好比人有生老病死,自然界有日月更替,每個元件在網頁中也會有被建立、更新和刪除,如同有宣告的機體一樣       

----《深入淺出react和redux》程墨

react的生命週期可以分為三個過程

裝載過程(mont),就是元件在第一次在dom樹中渲染的過程

更新過程(update),元件被重新渲染的過程

解除安裝過程(unmount),元件從dom中被移除的過程

一 、裝載過程

依次呼叫如下過程   constructor、getinitialstate、getdefaultprops、componentwillmont、render、componentdidmount

1、constructor    

就是es6裡的建構函式,建立乙個元件類的例項,在這一過程中我們要進行兩步操作:初始化state,繫結成員函式的this環境

2、getinitialstate和getdefaultprops

這個兩個過程可以不去深究,只會在用到react.createclass方法創造的元件類才會發生作用,所以在es6的方法定義的react元件中根本不會用到

3、render

不誇張的說render是react元件中最為重要的乙個函式。這個react中唯一不可忽略的函式,在render函式中,只能有乙個父元素。

其中需要深入分析的是:render函式是乙個純函式,他並不進行實際上的渲染動作,他只是乙個jsx描述的結構,最終是由react來進行渲染過程,render函式中不應該有任何操作,對頁面的描述完全取決於this.state和this.props的返回結果,不能在render呼叫this.setstate

有乙個公式總結的非常形象ui=render(data)

4、componenwillmonunt和componentdidmount

這兩個函式分別在render前後執行,componentwillmonut顯得有些雞肋,還沒有任何東西展示,操作完全可以提前到constructor中來進行

但是componentdidmount函式作用就大得多,由於這一過程通常只能在瀏覽器端呼叫,所以我們在這裡獲取非同步資料,而且在componentdidmount呼叫的時候,元件已經被裝載到dom樹上了,還有,可以在這裡執行其他庫的**,比如jquery(很皮~)

二、更新過程

簡單來說就是props和state被修改的過程,依次呼叫compwillreceiveprops、shouldcomponentupdate、componentwillupdate、render、componentdidupdate

1、componentwillreceiveprops(nextprops)

並不是只有在props發生改變的時候才會被呼叫,實際上只要是父元件的render函式被呼叫,render裡面被渲染的子元件就會被更新,不管父元件傳給子元件的props有沒有被改變,都會觸發子元件的componentwillreceiveprops過程,但是,this.setstate方法的觸發過程不會呼叫這個函式,因為這個函式適合根據新的props的值來計算出是不是要更新內部狀態的state。

2、shouldcomponentupdate(nextprops, nextstate)

這個函式的重要性,僅次於render,穩坐第二把交椅,render函式決定了改渲染什麼,而shouldcomponentupdate決定了不需要渲染什麼,這兩位大佬都需要返回函式,這一過程可以提高效能,忽略掉沒有必要重新渲染的過程

3、componentwillupdate和componentdidupdate

和裝載過程不同,這裡的componentdidupdate,既可以在瀏覽器端執行,也可以在伺服器端執行

三、解除安裝過程

這裡感覺沒啥好說的,實際中也很少用到,這裡只有乙個componentwillunmount,我最開始還很敏銳的發現,前兩個過程都有will和did倆個方法,怎麼到這裡就只有will了,後來仔細一想,連dom都已經刪除掉了,你還did幹啥。。。哈哈

在非父子元件傳值得時候,在這裡取消訂閱事件

生命週期對照表

參考資料

《深入淺出react和redux》程墨

react入門例項-阮一峰

元件生命週期|react入門教程

react:元件的生命週期

react(四)元件的生命週期

元件的生命週期 當元件第一次渲染時,依次呼叫的過程 1 constructor 1 不是所有元件均會定義該函式 2 定義該函式的目的 this.state 例如,已有成員函式clickbtn,繫結this指向的方式可以是this.clickbtn this.clickbtn.bind this 2 ...

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發生變化的...