React的生命週期

2021-10-08 21:55:13 字數 3020 閱讀 7327

componentwillmount:render之前最後一次修改狀態的機會

render:只能訪問this.props 和 this.state ,不允許修改狀態和dom輸出

componentdidmount:成功render並渲染完成真實的dom之後觸發,可以修改dom

componentwillreceiveprops:父元件修改屬性觸發

shouldcomponentupdate: 返回false會阻止render呼叫

componentwillupdate: 不能修改屬性和狀態

render:只能訪問this.props和this.state ,不允許修改狀態和dom輸出

componentdidupdate:可以修改dom

componentwillunmount: 在刪除元件之前進行清理操作,比如計時器和事件***

注意:1.componentwillmount,在ssr中 ,這個方法將會被多次呼叫,所以會重複觸發多遍, 同時在這裡如果繫結事件,講無法解綁 ,導致記憶體洩漏 , 變得不夠安全高效, 逐步廢棄 。

2.componentwillreceiveprops ,外部元件多次頻繁更新傳入多次不同的props,會導致不必要的非同步請求

3.componentwillupdate ,更新前記錄dom狀態,可能會做一些處理, 與componentdidupdate相隔時間如果過長 ,會導致狀態不太新

1.getderivedstatefromprops, 第一次的初始化元件以及後續的更新過程中(包括自身狀態更新以及父傳子),返回乙個物件作為新的state,返回null則說明不需要在這裡更新state

2.getsnapshotbeforeupdate,取代了componentwillupdate,觸發時間為update發生的時候 ,在render之後 , dom渲染之前,返回乙個值 , 作為componentdidupdate的第三個引數 。

import react,

from 'react'

import axios from 'axios'

class

extends

component

componentdidmount()

)}) console.

log(

'componentdidmount')}

componentwillmount()

render()

>

<

/li>

) console.

log(

'render'

)return

hello --

<

/ul>

<

/div>

}}

shouldcomponentupdate

(nextprops, nextstate)

return

true

}

import react,

from 'react'

class

extends

component

render()

>衣服<

/li>

> 褲子<

/li>

> 鞋<

/li>

<

/ul>

child--

-<

/child>

<

/div>

}handleclick

(type))}

}class

child

extends

component

componentwillreceiveprops

(nextprops)

}

class

child

extends

component

render()

<

/div>

}componentdidmount()

componentwillunmount()

// unsafe_componentwillreceiveprops(nextprops)

static

getderivedstatefromprops

(props, state)

}componentdidupdate

(prevprops, prevstate)

console.

log(

"axios 發請求 帶上引數"

+this.state.childtype)

}}

getsnapshotbeforeupdate =

(prevprops, prevstate)

=>

}componentdidupdate

(prevprops,prevstate,data)

react中效能優化的方案

1.shouldcomponentupdate ,控指元件自身或者子元件是否需要更新,尤其在子元件非常多的情況下,需要進行優化

2.purecomponent ,會幫你比較 新props和舊的props, 新的state和老的state(值相等,或者物件含有相同的屬性,且屬性值相等),決定shouldcomponentupdate返回true或者false,從而決定要不要呼叫render function 。

注意,如果你的state和props永遠都會變,那purecomponent並不會比較快,因為shallowequal也需要時間

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