1. 程式人生 > >react的生命周期

react的生命周期

最新 str 判斷 span color cto 掛載 his spa

當組件第一次渲染的時候執行哪些生命周期?

constructor--->componentWillMount--->render--->componentDidMount

1.constructor

初始化

當前生命值周期可以定義當前組件所需要的狀態

當前生命周期函數必須寫super,否則就會報錯或者this的指向發生改變

如果在super和constructor中沒有傳遞props這個參數的話是訪問不到this.props屬性的

2.componentWillMount

組件掛載前

在當前生命周期函數裏可以訪問到props屬性,在這裏可以接收外部屬性,同時可以將外部屬性轉變成內部屬性

在當前生命周期函數裏不需要調用setState,因為當前函數執行完畢後會自動執行render

3.render

a.render函數什麽時候會執行?

當this.state,this.props發生改變的時候,會執行render函數

b.this.state/this.props發生改變的時候會執行哪些生命周期函數

  this.state:

    shouldComponentUpdate--->componentWillUpdate--->render--->componentDidUpdate

  this.props

    componentWillReveiceProps--->shouldComponentUpdate--->componentWillUpdate--->render--->componentDidUpdate

c.render函數執行的時候會將虛擬DOM和數據相結合,緩存一份虛擬DOM,當數據發生改變的時候會將虛擬DOM與緩存的虛擬DOM作比較(diff算法),比較完畢以後,將需要修改的虛擬DOM進行批量修改,減少不必要的更新。

d.diff算法

新舊兩個虛擬DOM的對比就是diff算法

4.componentDidMount

render函數執行後,componentDidMount這個生命周期函數就會執行,在這個生命周期函數裏可以進行fatch請求,獲取真實DOM

5.componentWillUnMount

組件銷毀

6.shouldComponentUpdate

當this.state,this.props發生改變時,會執行render函數

該生命周期函數必須返回一個布爾值,如果返回true,則繼續執行下面的生命周期函數;

                 如果返回false,則下面的生命周期函數不執行。

該生命周期函數是用來判斷DOM是否更新的,而不是用來判斷數據是否更新的(不管返回值是true還是false,this.state裏的數據都會改變,但是DOM值不會改變)

該生命周期函數可以做一些相關操作減少虛擬DOM不必要的更新(利用接收到的兩個參數props,state來比較)

7.componentWillUpdate

更新前 虛擬DOM與數據相結合,但沒有真正的DOM結構

8.componentDidUpdate

更新後 數據與模板結合可以產生真正的DOM結構,在這裏可以獲取到數據更新後最新的DOM結構

9.componentWillReceiveProps

當外部屬性發生變化的時候就會執行當前生命周期函數,當前生命周期函數會有一個新的參數props

操作DOM的兩種方式:

ref="list" this.refs.list

ref={(tagName)=>{this.key=tagName}} this.key

react生命周期函數哪些只執行一次?

constructor

componentWillMount

componentDidMount

componentWillUnMount

react生命周期函數哪些可以執行多次?

render

shouldComponentUpdate

componentWillUpdate

componentDidUpdate

componentWillReceiveProps

react的生命周期