React的生命周期(讀書整理)

即使最近還是有點拖延,可還是再看一些關(guān)于React的東西??吹絉eact組件的生命周期的時候,讓我想到了Vue同樣也有生命周期,即使兩個框架在意義上有些不同,但是同樣是一個東西從創(chuàng)建到消亡,類比到

React的組件定義了以下三個過程:

  1. Mouting(裝載過程):是在組件實例在創(chuàng)建時和插入DOM時調(diào)用的。
  2. Update(更新過程):當(dāng)組件的propsstate發(fā)生改變時,重新渲染頁面是調(diào)用的。
  3. Unmounting(卸載過程):組件從DOM中移動時調(diào)用的。

說了這些可能對于沒有接觸過React的人還是蠻陌生的,還是直接說每一個跟過程中有哪些方法可以調(diào)用。

Mounting

constructor

這個方法主要是為組件初始化state和綁定函數(shù)的this環(huán)境用的。

componentWillMount

這個方法是在render()之前調(diào)用的,在這個函數(shù)當(dāng)中不能對組件的state進行設(shè)置(就是this.setState),因為這時候即使修改了狀態(tài)也不會觸發(fā),因為一切都太晚了,所以想在這個方法做的事情都可以提到constructor里面。

This is the only lifecycle hook called on server rendering. Generally, we recommend using the constructor() instead.

render

這是一個最重要的函數(shù),每一個組件這是一個必須要有的函數(shù)。當(dāng)這個函數(shù)被調(diào)用的時候,他會根據(jù)propsstate的值返回一個React的組件,這個組件可以是原生的DOm組件也可以是你自己定義的組件;當(dāng)然你也可以返回nullfalse,這樣告訴React這次組件并沒有什么東西去渲染。
render函數(shù)是一個純函數(shù),所以在這個函數(shù)中不用修改組件的狀態(tài)

componentDidMount

該函數(shù)并不是render運行完就立刻執(zhí)行的,而是組件已經(jīng)裝載(Mounted)在DOM的時候,在這里就可以從遠程加載數(shù)據(jù),也可以發(fā)起網(wǎng)絡(luò)請求(如AJAX)。這里this.setState是會觸發(fā)重繪(re-rendering)。

Update

componentWillReceiveProps

在父組件的render函數(shù)調(diào)用的時候,不論父組件傳遞給子組件的props值有沒有發(fā)生變化,都會觸發(fā)子組件的componentWillReceiveProps的方法。而且通過this.setState方法并不會調(diào)用該函數(shù)。

shouldComponentUpdate

這個函數(shù)在整個組件的生命周期中也是尤為重要。因為這個函數(shù)決定一個組件什么時候不需要渲染。該函數(shù)的會接受新的props值和state值,而觸發(fā),默認(rèn)返回是true值,告訴React繼續(xù)渲染該組件,如果返回flase值則是終止后面的渲染。
其實根據(jù)上述解釋并不會認(rèn)為這是一個重要的函數(shù)!其實React主要火的原因是,會有對每一次的DOM渲染有一個diff算法,找出不同的節(jié)點信息再去渲染那一個節(jié)點,而這一個函數(shù)就是為了提高整體性能的作用。

componentWillUpdate

這個函數(shù)當(dāng)中不能調(diào)用this.setState方法,如果你想更新狀態(tài)讓prop改變的話,還是使用componentWillReceiveProps函數(shù)。該函數(shù)不會在最初的render函數(shù)中調(diào)用。

componentDidUpdate

這里可以操作DOM樹了,因為組件已經(jīng)完成了更新。這里也可以進行網(wǎng)絡(luò)請求,也可以比較本次和上一次的prop值。該函數(shù)不會在最初的render函數(shù)中調(diào)用。

Unmounting

componentWillUnmount

當(dāng)React組件從DOM樹上移除的時候調(diào)用。該函數(shù)的工作主要是和componentDidMount有關(guān)。

以上就是對React生命周期函數(shù)的稍許介紹,有疑問或理解偏頗的地方歡迎指出。

最后編輯于
?著作權(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)容

  • 原教程內(nèi)容詳見精益 React 學(xué)習(xí)指南,這只是我在學(xué)習(xí)過程中的一些閱讀筆記,個人覺得該教程講解深入淺出,比目前大...
    leonaxiong閱讀 2,940評論 1 18
  • 做React需要會什么? react的功能其實很單一,主要負責(zé)渲染的功能,現(xiàn)有的框架,比如angular是一個大而...
    蒼都閱讀 14,951評論 1 139
  • 本筆記基于React官方文檔,當(dāng)前React版本號為15.4.0。 1. 安裝 1.1 嘗試 開始之前可以先去co...
    Awey閱讀 7,927評論 14 128
  • 最近看了一本關(guān)于學(xué)習(xí)方法論的書,強調(diào)了記筆記和堅持的重要性。這幾天也剛好在學(xué)習(xí)React,所以我打算每天堅持一篇R...
    gaoer1938閱讀 1,811評論 0 5
  • 從事在線教育快一年了,現(xiàn)在總結(jié)整理一些內(nèi)容——談在線教育和線下教育的差異。分析的方法有很多種,這里選擇的是5W1H...
    DMo閱讀 2,807評論 0 2

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