国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

zhoutk / 3141人閱讀

摘要:接上文,流程圖我們已經(jīng)知道掛載的工作流程,現(xiàn)在我們換個方向研究下方法,這個也是的重要組成部分。這個問題,我們會在下一篇文章中進行解答。。。

接上文,

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

this.setState

我們已經(jīng)知道掛載的工作流程,現(xiàn)在我們換個方向研究下--setState方法,這個也是React的重要組成部分。

首先,為什么我們可以在一些方法中調(diào)用setState方法呢?顯然,我們的組件是從ReactComponent組件繼承下來的。我們?nèi)eact源碼中看下setState方法的實現(xiàn):

//srcisomorphicmodernclassReactComponent.js#68
this.updater.enqueueSetState(this, partialState)

正如你所見的那樣,代碼里有updater的相關(guān)調(diào)用,那么,什么是updater呢?在我們對掛載過程的分析中,mountComponent的調(diào)用過程里,實例會接收一個updater,作為對
ReactUpdateQueue的引用(srcrendererssharedstackreconcilerReactUpdateQueue.js)

深入到enqueueSetState方法中,在起初,React會將partial state對象(通過this.setState傳入的對象)壓入到內(nèi)部實例的_pendingStateQueue中(公共實例,指的是這種自定義實例,而內(nèi)部實例,則是指掛載過程中創(chuàng)建的ReactCompositeComponent組件)。緊接著,在調(diào)用enqueueUpdate方法的過程中,會檢查是否組件在更新過程中并將自定義組件壓入到dirtyComponent的列表里,
如果沒有在更新過程中,則初始化更新事務(wù)并壓入組件到dirtyComponent里。

概括下,每個組件都是有自己的阻塞狀態(tài)列表,每次你在一次事務(wù)中調(diào)用setState方法,
其實只是將對象壓入到一個隊列里,然后,它們會依次合并成一個狀態(tài)。同時,當(dāng)你調(diào)用setState方法時,React會將你的組件壓入到dirtyComponent的列表里。看到這里,你可能會有疑問,dirtyComponent是如何工作的。這個問題,我們會在下一篇文章中進行解答。。。
(未完待續(xù))

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

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/95846.html

相關(guān)文章

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

    摘要:技術(shù)上來說,當(dāng)方法被調(diào)用后或者發(fā)生改變后,方法都會被調(diào)用。下一步,會設(shè)置為。之后,檢測當(dāng)前更新是否由更新引起的。這是因為,使用是導(dǎo)致組件持久化更新,而會被方法的返回值重新賦值。 接上文, React流程圖:https://bogdan-lyashenko.gith... 更新組件 關(guān)于組件的更新,我們先看下代碼里的注釋: 對于已掛載組件的更新過程,React會首先調(diào)用component...

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

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

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

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

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

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

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

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

    evin2016 評論0 收藏0

發(fā)表評論

0條評論

zhoutk

|高級講師

TA的文章

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