1. 程式人生 > >React生命週期總結

React生命週期總結

生命週期可能會經歷如下三個過程:
裝載過程:把元件第一次在DOM樹中渲染的過程
更新過程:當元件被重新渲染的過程
解除安裝過程:元件從DOM中刪除的過程

裝載過程:
當元件第一次被渲染的時候,依次呼叫的函式如下:
constructor
一個React元件需要建構函式,往往是為了如下目的:
初始化state
繫結成員函式的this環境

getIniteState
初始化元件的this.state 只有用React.createClass方法創造出來的元件才會發生作用,es6語法中無此方法

getDefaultProps
初始化元件的this.state 只有用React.createClass方法創造出來的元件才會發生作用,es6語法中無此方法

componentWillMount
既可以在伺服器端被呼叫,也可以在瀏覽器端被呼叫

render
一個React元件可以忽略其他所有函式都不實現,但是一定要實現render函式,因為React元件的父類React.Component類對除了render之外的其它生命週期函式都有預設實現
render函式不做實際的渲染動作,它只是返回一個jsx結構的描述,最終由React來操作渲染過程
不需要渲染任何DOM元素的時候,可以讓render函式返回一個null 或者 是false
render函式是一個純函式,完全根據this.state和this.props來決定返回的結果,不要產生任何的副作用

componentDidMount
只能在瀏覽器端被呼叫,在伺服器端被呼叫的時候,不會執行
因為“裝載”是一個建立元件並放到DOM樹上的過程,伺服器端是無法產生DOM樹的,只是一段字串而已。所以無法再伺服器端執行
此階段,元件已經被裝載在DOM樹上了,可以放心獲取渲染出來的任何DOM

更新過程:
當props或者state被修改的時候,就會觸發元件的更新過程
componentWillReceiveProps(nextProps)
只要父元件的render函式被呼叫,在render函式裡被渲染的子元件,都會經歷更新的過程,不管父元件傳給子元件的props有沒有改變,都會觸發componentWillReciveProps
注意 this.setState觸發的更新,是不會呼叫這個方法的。這個方法是根據nextProps計算是否更新內部狀態的state,如果this.setState的呼叫 觸發了componentWillReciveProps,則會導致死迴圈
nextProps代表這一次渲染傳入的props,this.props代表上一次渲染的props,兩者有變化的時候,才會呼叫this.setState來更新元件內部的state

shouldComponentUpdate(nextProps,nextState)
決定了一個元件什麼時候不需要渲染
使用恰當 可以提升效能
如果返回true,則會呼叫componentWillUpdate,render,componentDidUpdate,否則不會有後續的方法呼叫

componentWillUpdate
render
componentDidUpdate
無論更新過程發生在瀏覽器端還是伺服器端,此函式都會被執行
實際上,在React做伺服器端渲染的時候,基本上不會經歷更新過程,因為服務端渲染,只需要產出HTML的字串就好了,而裝載過程就可以達到此目的,所以正常情況下,伺服器端是不會呼叫compentDidUpdate方法,如果呼叫了,說明程式出錯了,需要改進。

解除安裝過程:
componentWillUnMount:
當React元件要從DOM樹上清掉之前呼叫,這個函式適合做一些請理性的工作
往往和componentDidMount有關,如果componentDidMount中,通過非React方法,建立了一些DOM元素,如果不刪除的話,可能導致記憶體溢位,所以需要在componentWillUnMount中把這些DOM元素清理掉

相關推薦

React生命週期總結

生命週期可能會經歷如下三個過程: 裝載過程:把元件第一次在DOM樹中渲染的過程 更新過程:當元件被重新渲染的過程 解除安裝過程:元件從DOM中刪除的過程 裝載過程: 當元件第一次被渲染的時候,依次呼叫的函式如下: constructor

React生命週期學習總結

Github地址 React生命週期學習總結 1. constructor 1.1 作用 初始化state 繫結事件處理函式的this指向 1.2 props向state拷貝 constructor(props) { this.stat

React v15到v16.3, v16.4新生命週期總結以及使用場景

前言 真正在專案中用到React,正是React版本從15到16.3(專案當前使用版本)又到16.4的變化期。React從15到16最令人困惑的改變莫過於生命週期函式的劇烈變動,由此引發的一些新的實踐方法。事實上,我們專案在從15升級到16,在生命

react 生命週期 —— 從原始碼理解

react生命週期理解 渲染的過程 react 生命週期在不同狀態下的執行順序 當首次裝載元件時,按順序執行 getDefaultProps、getInitialState、componentWillMount、render 和 componentDidMo

React生命週期鉤子

最近的工作都很忙,所以很少完整的時間可以用來總結和回顧知識點,今天就趁著是週末,我準備在這裡複習和回顧一下React的基礎。工作中主要用的vue比較多,在工作中使用React也已經是一年前了,當時用的螞蟻金服的antd框架,相比vue,我個人還是比較喜歡寫React的,其實vue跟React之間除了寫法上的差

最常見的生命週期總結

最常見的生命週期總結     preInit:在頁面生命週期的早期階段可以訪問的事件,在preInit事件後,將載入個性化資訊和頁主題。     Init:在所有的控制元件都已初始化,且已應用所有外觀設定後引發。使用該事件來讀取或初始化控制元件屬性。

Vue 生命週期總結與思考實驗

               生命週期函式就是 Vue 例項在某一個時間點自動執行的函式 先上圖,一步一步講解 建議邊看生命週期圖 邊看最下面的步驟一步一步的走,有不理解的地方看看總結。並且在事件中多實驗。

React 快速入門-React 生命週期

博主的參考資料 React 生命週期-快樂的開發者 菜鳥教程-React 元件生命週期 具體例項結果 操作為初始化元件,更新一次 state 中包含的值,移除該元件 測試程式碼 html 檔案 <!DOCTYPE html> <html

React生命週期分析

在 V16 版本中引入了 Fiber 機制。這個機制一定程度上的影響了部分生命週期的呼叫,並且也引入了新的 2 個 API 來解決問題。 在之前的版本中,如果你擁有一個很複雜的複合元件,然後改動了最上層元件的state,那麼呼叫棧可能會很長,呼叫棧過長,再加上中間進行了複雜的操作,就可能導致長時間阻

react 生命週期的學習

寫給自己看的一些東西 生命週期函式使用時必須使用已經定義好的名字,如componentWillMount()等,表示所編寫的命令在這個階段執行。如componentWillMount(),表示編寫的命令在元件將要載入時執行。其函式的位置不重要,在哪兒都是會按照理應當的順序執行。 但是在不

一張圖瞭解react生命週期

網上有很多關於react生命週期的文章,看完過後還是不太能理解。 樓主的建議是先把react生命週期的十個方法先背下來: 1.getDefaultProps 作用於元件類,只調用一次,返回物件用於設定預設的props,對於引用值,會在例項中共享。 2.getInitialState

react 生命週期筆記

Component initial 1. constructor() 會在裝配之前呼叫,建構函式是初始化狀態的合適位置 可以基於屬性來初始化狀態,這樣有效的分離屬性並根據初始屬性設定狀態

vue生命週期react生命週期對比

一 vue的生命週期如下圖所示(很清晰)初始化、編譯、更新、銷燬   二 vue生命週期的栗子  注意觸發vue的created事件以後,this便指向vue例項,這點很重要 <!DOCTYPE html> <html> <head> <

重新認識 React 生命週期

前言 React 從 v16 開始,像是跨入了新的時代,效能和新的 API 都令人矚目。重新認識 React,從重新認識生命週期開始。 為了更好的支援非同步渲染(Async Rendering),解決一些生命週期濫用可能導致的問題,React 從 V16.3 開始,對生命週期進

React 生命週期

生命週期 Mounting 掛載 (渲染到DOM中) - constructor - componentWillMount 元件即將掛載 - render - componentDidMount 元件完成掛載 Updating 更新 - componentWil

React生命週期函式

生命週期函式指在某一時刻元件會自動呼叫執行的函式 React生命週期 掛載時的生命週期 componentWillMount // 在元件第一次被掛載到頁面前的時刻執行 componentDidMount // 在元件第一次被掛載到頁面後的時刻執行 更新時的

React 生命週期(摘抄)

/* 首先當元件第一次渲染的時候會執行哪些生命週期函式? constructor--->componentWillMount--->render--->componentDidMount constructor: 初始化

小程式/Vue/React 生命週期

小程式生命週期     https://developers.weixin.qq.com/miniprogram/dev/framework/app-service/app.html 註冊程式:應用生命週期 App({...}) 使用者首次開

React生命週期函式的使用

1.constructor():建構函式 執行時間:元件被載入前最先呼叫,並且僅呼叫一次 作用:定義狀態機變數 注意:第一個語句必須是super(props),正確定義狀態機程式碼如下 constructor(props) { super(props); this.state = { con

react生命週期

元件的生命週期可分成三個狀態: Mounting:已插入真實 DOM Updating:正在被重新渲染 Unmounting:已移出真實 DOM 生命週期的方法有: componentWillMount  在渲染前呼叫,在客戶端也在服務端。一般用的比較少,更多的