亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

【Under-the-hood-ReactJS-Part11】React源碼解讀

hiyayiji / 371人閱讀

摘要:技術(shù)上來說,當(dāng)方法被調(diào)用后或者發(fā)生改變后,方法都會被調(diào)用。下一步,會設(shè)置為。之后,檢測當(dāng)前更新是否由更新引起的。這是因?yàn)?,使用是?dǎo)致組件持久化更新,而會被方法的返回值重新賦值。

接上文,

React流程圖:
https://bogdan-lyashenko.gith...

更新組件

關(guān)于組件的更新,我們先看下代碼里的注釋:

對于已掛載組件的更新過程,React會首先調(diào)用componentWillReceiveProps和shouldComponentUpdate這兩個(gè)方法。然后,在更新沒有跳過的前提下,剩下的有關(guān)更新的生命周期方法會被調(diào)用,在這之后,DOM節(jié)點(diǎn)會被最終更新。默認(rèn)情況下,DOM的更新會使用React中的虛擬DOM算法,有特殊需求的客戶端可能需要覆蓋相關(guān)實(shí)現(xiàn)。(‘Perform an update to a mounted component. The componentWillReceiveProps and shouldComponentUpdate methods are called, then (assuming the update isn’t skipped) the remaining update lifecycle methods are called and the DOM representation is updated. By default, this implements React’s rendering and reconciliation algorithm. Sophisticated clients may wish to override this.’)

看起來還是比較合理的一個(gè)過程。

以上過程中,我們做的第一件事就是檢測props是否改變。技術(shù)上來說,當(dāng)setState方法被調(diào)用后或者props發(fā)生改變后,updateComponent方法都會被調(diào)用。如果props真的發(fā)生了改變,那么生命周期方法componenttWilllReceiveProps就會被調(diào)用。之后,React會基于阻塞狀態(tài)隊(duì)列(我們之前設(shè)置的存放局部state的隊(duì)列,在我們的例子里會像這個(gè)樣子:[{message:"click state message"}])里的state重新計(jì)算nextState,當(dāng)然,如果只是props發(fā)生了改變,那么state相關(guān)操作不會被執(zhí)行。

下一步,React會設(shè)置shouldUpdate為true。這個(gè)也是為什么默認(rèn)情況下我們不需要重寫shouldComponentUpdate方法的原因,React中,組件就是默認(rèn)更新的。之后,檢測當(dāng)前更新是否由forceUpdate更新引起的。 更新一個(gè)組件,除了更改state和props外,也是可以通過調(diào)用forceUpdate方法來實(shí)現(xiàn)的,但是,React官方文檔里認(rèn)為應(yīng)該避免使用這個(gè)方法。這是因?yàn)?,使用forcuUpdate是導(dǎo)致組件持久化更新,而shouldUpdate會被shouldComponentUpdate方法的返回值重新賦值。如果最終判斷組件是不需要被更新的,React還是會設(shè)置props和state,但是會跳過更新流程的其他部分。

(未完待續(xù))

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/95924.html

相關(guān)文章

  • Under-the-hood-ReactJS-Part8】React源碼解讀

    摘要:接上文,流程圖我們已經(jīng)知道掛載的工作流程,現(xiàn)在我們換個(gè)方向研究下方法,這個(gè)也是的重要組成部分。這個(gè)問題,我們會在下一篇文章中進(jìn)行解答。。。 接上文, React流程圖:https://bogdan-lyashenko.gith... this.setState 我們已經(jīng)知道掛載的工作流程,現(xiàn)在我們換個(gè)方向研究下--setState方法,這個(gè)也是React的重要組成部分。 首先,為什么我...

    zhoutk 評論0 收藏0
  • Under-the-hood-ReactJS-Part6】React源碼解讀

    摘要:源碼里有個(gè)獨(dú)立的模塊管理組件的所有子元素。第一個(gè),實(shí)例化子元素使用并掛載它們。至于具體掛載流程,基于子元素類型的不同而有不同的掛載過程。掛載的過程基本完成了。 接上文, React流程圖:https://bogdan-lyashenko.gith... 創(chuàng)建初始子組件 在之前的步驟里,組件本身的構(gòu)建已經(jīng)完成,接下去,我們分析它們的子元素??偣卜譃閮刹剑簰燧d子元素(this.mountC...

    codergarden 評論0 收藏0
  • Under-the-hood-ReactJS-Part9】React源碼解讀

    摘要:當(dāng)鼠標(biāo)事件發(fā)生時(shí),組件的最外層會進(jìn)行處理,然后通過幾層包裝器的處理后,會開始進(jìn)行批量更新操作。在這之后,會將這些事件處理成常見到樣子。 接上文, React流程圖:https://bogdan-lyashenko.gith... 回到最初 在流程圖中,也許你已經(jīng)注意到,setState方法可以通過幾種方式觸發(fā),更準(zhǔn)確的說,可以分為是否由外部引起的(也就是是否由用戶觸發(fā))。讓我們看下如下...

    SnaiLiu 評論0 收藏0
  • Under-the-hood-ReactJS-Part13】React源碼解讀

    摘要:接著,將返回的元素和之前的進(jìn)行比較的,以驗(yàn)證是否真的需要更新。我們看下代碼,代碼比較簡單好,對應(yīng)于我們的這個(gè)列子,我們對于方法的更改并不會對方法造成影響。所以我們進(jìn)入下一步,也就是對于節(jié)點(diǎn)的更新。 接上文, React流程圖:https://bogdan-lyashenko.gith... 如果組件真的需要更新 在組件剛開始更新過程時(shí),如果有定義componentWillUpdate方...

    jerryloveemily 評論0 收藏0
  • Under-the-hood-ReactJS-Part4】React源碼解讀

    摘要:接上文,流程圖子組件掛載我們繼續(xù)探究方法。對于我們的實(shí)例代碼而言,就是標(biāo)簽,所以沒有額外的處理過程。屬性驗(yàn)證緊接著的被調(diào)用的驗(yàn)證方法用于確保被正確設(shè)置,否則,會拋出異常。 接上文, React流程圖:https://bogdan-lyashenko.gith... 子組件掛載 我們繼續(xù)探究mount方法。 如果渲染的標(biāo)簽里有復(fù)雜的html標(biāo)簽,如video,form,textarea等...

    evin2016 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<