React 生命周期

React 生命周期方法

我們接觸較多的應(yīng)該是 render()方法,其實這也是React的生命周期方法之一。還有幾個方法可以在React ES6類組件中被覆寫。
現(xiàn)在已經(jīng)知道能夠用在ES6類組件中的生命周期方法 :

  • constructor() .和 render() .
  1. constructor(構(gòu)造函數(shù)) 只有在組件實例化 并插入到DOM節(jié)點中的時候才會被調(diào)用。
    組件實例化的過程稱作組件的掛載(mount).
  2. render() 方法會在組件掛載的過程中被調(diào)用,同時組件更新的時候也會被調(diào)用。
    每當(dāng)組件的狀態(tài)(state)或者屬性(props)改變時,組件的render()方法都會被調(diào)用。
  • react 有更多的生命周期方法。
    在組件掛載的過程中還有另外兩個生命周期方法、:componentWillMount()和componentDid-Mount().
    構(gòu)造函數(shù)(constructor)最先執(zhí)行,componentWillMount()會在render()方法之前執(zhí)行。
    思考:當(dāng)組件的狀態(tài)或者屬性改變的時候用來更新組件的生命周期是什么樣的呢?
    總的來說,一共有5個生命周期方法用于組件的更新,調(diào)用順序如下:

    1. componentWillReceiveProps()
    2. shouldComponentUpdate()
    3. componentWillUpdate()
    4. render()
    5. componentDidUpdate()

    最后但同樣重要的 組件卸載也有生命周期 。 只有一個生命周期方法 :componentWillUn-mount()。

  • 即使在一個很大的React應(yīng)用中,除了constructor() 和render() 比較常用外,你只會用到一小部分生命周期函數(shù)

    • constructor(props) 它在組件初始化時被調(diào)用。在這個方法中,你可以設(shè)置初始化狀態(tài)及綁定類方法。
    • componentWillMount() 它在render() 方法之前被調(diào)用。這就是為什么它可以用作去設(shè)置組件內(nèi)部的狀態(tài),因為它不 會觸發(fā)組件的再次渲染。但一般來說 推薦 在constructor()中初始化狀態(tài)。
    • render() 這個生命周期方法是必須有的,它返回作為組件輸出的元素。這個方法應(yīng)該是一個純函數(shù),因此不應(yīng)該在這個方法中修改組件的狀態(tài)。它把屬性和狀態(tài)作為輸入并且返回(需要渲染的)元素。
    • componentDidMount() 它僅在組件掛載后執(zhí)行一次。這是發(fā)起異步請求去API獲取數(shù)據(jù)的絕佳時期。獲取到的數(shù)據(jù)將被保存在內(nèi)部組件的狀態(tài)中 然后在render()生命周期方法中展現(xiàn)出來。
    • componentWillReceiveProps(nextProps) 這個方法在一個更新生命周(update lifecycle)中被調(diào)用。新的屬性會作為它的輸入。因此你可以利用this.props來對比之后的屬性和之前的屬性。基于對比的結(jié)果去實現(xiàn)不同的行為。此外,你可以基于新的屬性來設(shè)置組件的狀態(tài)。
    • shouldComponentUpdate(nextProps,nextState) 每次組件因為狀態(tài)或者屬性更改而更新時,它都會被調(diào)用。你將在成熟的React應(yīng)用中使用它來進行性能優(yōu)化。在一個更新生命周期中,組件及其子組件將根據(jù)該方法返回的布爾值來決定是否重新渲染。這樣你可以阻止組件的渲染生命周期(render lifecycle)方法,避免不必要的渲染。
    • componentWillUpdate(nextProps,nextState) 這個方法是render()執(zhí)行之前的最后一個方法。你已經(jīng)擁有了下一個屬性和狀態(tài),他們可以在這個方法中任由你處置。你可以利用這個方法在渲染之前進行最后的準備。 注意:在這個生命周期方法中你不能觸發(fā)seState(). 如果想基于新的屬性計算狀態(tài),你必須利用 --> componentWillReceiveProps();
    • componentDidUpdate(prevProps,prevState) 這個方法在render()之后立即調(diào)用。你可以用它當(dāng)成操作DOM 或者執(zhí)行更多異步請求的機會。
    • componentWillUnmount() 它會在組件銷毀之前被調(diào)用。 你可以利用這個生命周期方法去執(zhí)行任何清理任務(wù)。

之前可能你已經(jīng)用過了 constructor() 和 render() 生命周期方法。對于 ES6 類組件來說他們是 常用的生命周期方法。實際上 render() 是必須有的,否則它將不會返回一個組件實例。

  • 還有一個 生命周期方法 :componentDidCatch(error,info) . 它在React16 中引入 。用來捕獲組件的錯誤。

參考資料

the road to learn react http://leanpub.com/the-road-to-learn-react-chinese/ by Robin Wieruch and JimmyLv

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 組件的生命周期方法分以下三個階段。 Mounting當(dāng)創(chuàng)建組件的實例并將其插入到DOM中時,將調(diào)用這些方法:con...
    _八神光_閱讀 1,213評論 0 0
  • 1 React生命周期流程 調(diào)用流程可以參看上圖。分為實例化,存在期和銷毀三個不同階段。介紹生命周期流程的文章很多...
    Dabao123閱讀 384評論 0 1
  • 又是一個老生常談的內(nèi)容,從ES6起已經(jīng)開始使用class的方式去創(chuàng)建組件,這種創(chuàng)建方式上的變化也帶來了寫法和方法上...
    殷灬商閱讀 490評論 0 1
  • 在組件的整個生命周期中,隨著該組件的props或者state發(fā)生改變,它的DOM表現(xiàn)也將有相應(yīng)的改變,一個組件就是...
    web蝸牛閱讀 647評論 0 1
  • 譯自 React Component Lifecycle 每個組件都有若干生命周期函數(shù)。如函數(shù)名稱所示,帶有wil...
    KrisLeeSH閱讀 627評論 0 0

友情鏈接更多精彩內(nèi)容