React的生命週期

2021-10-09 14:14:03 字數 2913 閱讀 7803

1. 初始化階段

- 鉤子函式個數: 4

- 主線程執行結束之後鉤子函式才會執行

鉤子函式:

constructor(){}

1.任務

-通過super來將繫結在元件身上的props賦值與this.props = props

-定義元件狀態this.state={} ,不在這裡定義的話,外面就不要寫this

-普通函式定義是可以繫結this,這樣呼叫普通函式的時候,可以直接寫this.函式名

componentwillmount(){}

1.表示元件即將掛載,用於初始化事件和生命週期

2.react內部完成任務,不干預

3.下一版本棄用

4.資料可以拿到 資料請求 修改資料

5.真實dom無法拿到,虛擬dom也無法拿到

render(){}

任務1.底層 react.createelement

2.解析 this.props和this.state

3.將jsx元素渲染為vdom物件模型,生成了虛擬dom

注意:在這各鉤子函式中不可以使用setstate

1.因為js是單執行緒的,當前已經有任務了,將jsx元素渲染為虛擬dom

2.如果在render函式解析state和props的同時,還去改變資料,會造成棧溢位

componentdidmount(){}

1.表示元件掛載結束

2.任務

-資料可以拿到 資料請求 資料修改

-真實dom可以拿到 真實dom操作/第三方庫例項化

2. 更新階段

- 鉤子函式個數: 5

- react更新階段分為兩種更新: props屬性更新/state狀態更新

- 觸發條件:setstate/foreupdate,後面這個可以渲染類的例項

- props更新走5個,state更新走4個

- 父元件狀態改變,子元件是會渲染的,但是子元件狀態改變,父元件不收影響

鉤子函式

componentwillreceiveprops(nextprops){}

-注意:這個就是和state改變的差別,state更新沒有該鉤子函式

-接受最新的屬性值,nextprops,而this.props是上一次的值

-監聽屬性是否發生改變

-應用場景:

-路由的改變,頭部.底部發生對應的變化,可以操作真實dom

-將來的17版本也會變禁用

shouldcomponentupdate(nextprops,nextstate){}

-作用:決定元件是否要更新

-它的返回值是布林值,true為更新,false為不更新

-效能優化

-可以決定元件是否要渲染,如果沒有變化就不必進行渲染

-這裡進行的是淺對比,只能比較非引用型別,引用型別要自己去寫,呼叫遞迴,但是一般不會用深比較,因為這樣做的話,效率比每次都載入還低

-淺對比是對prop或者state內的值進行對比,而不是nextprops和this.props,因為物件的位址一定不相同

- nextstate 和 this.state【新值】 是一樣的【值】,所以要自己去設定乙個值進行比較,要注意非同步的問題

- nextprops 和 this.props【舊值】

componentwillupdate(nextprops,nextstate){}

表示元件更新前的準備工作 與 componentwillmount類似,但是可以操作真實dom

將來17版本會棄用

render(){}

-初始化階段執行一次

-更新階段也會執行一次

-解析this.state和this.props

-再次生成vdom

componentdidupdate(prevprops,prevstate){}

-prevprops或者prevstate是修改後最新的值

-通過filber演算法來對比兩次的vdom,生成patch補丁物件

-根據補丁物件生成真實dom,替換原有的節點

-功能和componentdidmount類似

-真實dom操作

-資料修改

3. 解除安裝階段

- 鉤子函式個數: 1

- 觸發方式

- 外部刪除 開關

- 內部刪除 reactdom.unmountcomponentatnode(』#root』),必須寫這個標籤,其他標籤無效,使用這個方法,所有元件全部解除安裝,包括定時器,例項之類的

- 任務

- 清除元件無法自動刪除的內容

- 例項

- 引用型別

- 計時器、定時器

- 事件

鉤子函式

componentwillunmount(){}

-在這裡手動清除自定義例項,比如定時器,事件監聽等,當然要觸發了這個函式才行,所以這是配合解除安裝元件的同時去除這些內容

-還有就是刪除這個元件的時候會觸發該解除安裝階段鉤子函式

4. 錯誤捕獲階段

- 鉤子函式個數: 1

- 觸發條件

- 父元件捕獲子元件 throw 出來的錯誤

- 作用

- 用回退ui來代替錯誤介面【斷網】

鉤子函式

componentdidcatch(error,info){}

error錯誤是什麼 info**出錯了

–當子元件出現錯誤,渲染寫好的div標籤的內容,這樣就會蓋住真實的錯誤資訊

-但是!!!一旦網路過快,一下子之後還是會顯示真實的錯誤頁面,所以這就需要將使用者此時的網路斷開,方法不是我們這邊處理

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...