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

資訊專欄INFORMATION COLUMN

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

SnaiLiu / 520人閱讀

摘要:當鼠標事件發生時,組件的最外層會進行處理,然后通過幾層包裝器的處理后,會開始進行批量更新操作。在這之后,會將這些事件處理成常見到樣子。

接上文,

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

回到最初

在流程圖中,也許你已經注意到,setState方法可以通過幾種方式觸發,更準確的說,可以分為是否由外部引起的(也就是是否由用戶觸發)。讓我們看下如下兩個列子,第一個中,
是由鼠標點擊觸發的,第二個中,是在componentDidMount中由setTimeout方法中被觸發的。

為什么會有這些不同呢?如果你還有印象,在之前的文章中,React對于更新的處理是批量的,也就是說,一系列更新操作會通過某種方式被收集起來,然后統一刷新到頁面上。當鼠標事件發生時,組件的最外層會進行處理,然后通過幾層包裝器的處理后,會開始進行批量更新操作。注意,批量更新操作的前提是確保ReactEventListener處于enabled狀態,而且,在前文提到過,在組件的掛載階段,ReactReconcileTransaction包裝器中的一個會先關閉它,以確保整個掛載過程的安全。 至于setTimeout中的調用,則是在將組件放入dirtyComponents列表之前,React會確保事務處于打開狀態,在這之后,關閉事務包裝器,然后將更新刷新到頁面上。

正如你所知,React實現了合成事件,在一下原生事件包裹了一些合成語法糖。在這之后,React會將這些事件處理成常見到樣子。看下如下代碼里到注釋:

</>復制代碼

  1. 為了更好地開發,通過模擬真實游覽器事件,我們可以得到更好開發工具整合過程(To help development we can get better dev tool integration by simulating a real browser event’)

</>復制代碼

  1. var fakeNode = document.createElement("react");
  2. ReactErrorUtils.invokeGuardedCallback = function (name, func, a) {
  3. var boundFunc = func.bind(null, a);
  4. var evtType = "react-" + name;
  5. fakeNode.addEventListener(evtType, boundFunc, false);
  6. var evt = document.createEvent("Event");
  7. evt.initEvent(evtType, false, false);
  8. fakeNode.dispatchEvent(evt);
  9. fakeNode.removeEventListener(evtType, boundFunc, false);
  10. };

回到我們的更新流程,我們在這里總結下大概的步驟:
1 調用setState方法
2 如果批量事務未處于開啟狀態,則打開該事務
3 將受影響組件添加到dirtyComponents列表里
4 通過調用ReactUpdates.flushBatchedUpdates方法關閉事務,也就意味著開始對dirtyComponents列表進行處理。

(未完待續)

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/95916.html

相關文章

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

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

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

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

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

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

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

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

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

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

    evin2016 評論0 收藏0

發表評論

0條評論

SnaiLiu

|高級講師

TA的文章

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