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

資訊專(zhuān)欄INFORMATION COLUMN

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

MartinHan / 756人閱讀

摘要:接上文,流程圖另外一個(gè)事務(wù)類(lèi)這次,我們將分析。在不同的平臺(tái),掛載的過(guò)程是不一樣的,所以,主模塊會(huì)和進(jìn)行交互,而則清楚下一步的工作。它會(huì)執(zhí)行組件的初始化,渲染標(biāo)記并注冊(cè)事件監(jiān)聽(tīng)器。執(zhí)行掛載方法后,我們就會(huì)得到將插入的真正的元素。

接上文,

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

另外一個(gè)事務(wù)類(lèi)

這次,我們將分析ReactReconcileTransaction。正如之前的文章里所講,我們關(guān)注的重點(diǎn)是事務(wù)包裝器,ReactReconcileTransaction中有三個(gè)包裝器:

//src
enderersdomclientReactReconcileTransaction.js#89
var TRANSACTION_WRAPPERS = [
  SELECTION_RESTORATION,
  EVENT_SUPPRESSION,
  ON_DOM_READY_QUEUEING,
];

從流程圖中能看出,這些包裝器的主要用途是用來(lái)保存當(dāng)前DOM的實(shí)際狀態(tài),在方法被調(diào)用前鎖定一些變化值,然后方法調(diào)用后重置這些值。React就是通過(guò)事務(wù)確保達(dá)到這些目標(biāo),比如,通過(guò)執(zhí)行事務(wù)(在事務(wù)開(kāi)始時(shí)獲取選擇的內(nèi)容然后在結(jié)束時(shí)恢復(fù)選擇的內(nèi)容)來(lái)確保選擇內(nèi)容不受干擾(input輸入框中的被選中內(nèi)容),同時(shí),ReactReconcileTransaction也會(huì)阻止那些由外層DOM操作(比如暫時(shí)性的將input中內(nèi)容移除)引發(fā)的事件(失焦/聚焦),為了達(dá)到這個(gè)目的,它會(huì)在事務(wù)開(kāi)始時(shí)關(guān)閉ReactBrowserEventEmitter,然后在關(guān)閉時(shí)重新開(kāi)啟。

現(xiàn)在,我們快到組件的掛載開(kāi)始階段了,在這個(gè)階段,會(huì)返回將插入到DOM的標(biāo)簽文本。其實(shí),ReactReconciler.mountComponent只是一個(gè)包裝器,或者更準(zhǔn)確的說(shuō),是一個(gè)中介,它把掛載方法委托給組件模塊。這里有個(gè)關(guān)鍵點(diǎn):

在實(shí)現(xiàn)一些平臺(tái)相關(guān)的邏輯時(shí),ReactReconciler模塊將會(huì)被調(diào)用。在不同的平臺(tái),掛載的過(guò)程是不一樣的,所以,主模塊會(huì)和ReactReconciler進(jìn)行交互,而ReactReconciler則清楚下一步的工作。

現(xiàn)在我們就回到了組件方法 mountComponent。 這個(gè)方法你很可能已經(jīng)見(jiàn)過(guò)了。它會(huì)執(zhí)行組件的初始化,渲染html標(biāo)記并注冊(cè)事件監(jiān)聽(tīng)器。經(jīng)過(guò)一段長(zhǎng)長(zhǎng)的調(diào)用,我們終于看到了組件掛載方法被調(diào)用。執(zhí)行掛載方法后,我們就會(huì)得到將插入DOM的真正的HTML元素。
(未完待續(xù))

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

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

相關(guān)文章

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

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

    codergarden 評(píng)論0 收藏0
  • Under-the-hood-ReactJS-Part9】React源碼解讀

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

    SnaiLiu 評(píng)論0 收藏0
  • Under-the-hood-ReactJS-Part11】React源碼解讀

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

    hiyayiji 評(píng)論0 收藏0
  • Under-the-hood-ReactJS-Part8】React源碼解讀

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

    zhoutk 評(píng)論0 收藏0
  • Under-the-hood-ReactJS-Part13】React源碼解讀

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

    jerryloveemily 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<