摘要:源碼里有個獨立的模塊管理組件的所有子元素。第一個,實例化子元素使用并掛載它們。至于具體掛載流程,基于子元素類型的不同而有不同的掛載過程。掛載的過程基本完成了。
接上文,
React流程圖:
https://bogdan-lyashenko.gith...
在之前的步驟里,組件本身的構建已經完成,接下去,我們分析它們的子元素。總共分為兩步:掛載子元素(this.mountChildren)和鏈接子元素到其父組件(DOMLazyTree.queueChild)。我們先進行子元素掛載的分析。
React源碼里有個獨立的模塊ReactMultiChild(srcrendererssharedstackreconcilerReactMultiChild.js)管理組件的所有子元素。我們先看下mountChildren方法,它包含兩個主任務。第一個,實例化子元素(使用ReactChildReconciler)并掛載它們。那么子元素有哪些類型呢?可以是HTML標簽,也可以是其他自定義組件。對于HTML元素,我們需要實例化ReactDOMComponent,對于自定義組件,則是ReactCompositeComponent。至于具體掛載流程,基于子元素類型的不同而有不同的掛載過程。
回顧流程到這里,是時候回顧下整個掛載的流程了。我們稍作休息,然后整理下整個流程中需要使用的對象。大概過程如下:
1)React實例ReactCompositeComponent來操作每個自定義組件(期間會有組件生命周期方法的執行,如componentWillMount)并且掛載它們。
2)在初次掛載期間,自定義組件的實例將會被創建(constructor方法會被調用)
3)之后,組件的render方法會被調用(比如一個簡單組件會返回一個div),然后通過ReactcreateElement方法,創建一個React元素。這些React元素會被直接或者在通過Babel轉化jsx后用于替換render方法中的標簽。這里的描述可能還不是很具體,我們看下一步。
4)對于div標簽,我們需要一個DOM組件。所有在實例化的過程中,我們會通過元素對象(上一步創建的對象)來創建ReactDOMComponent的實例。
5)之后,我們需要將DOM組件掛載到DOM文檔中,也就是說這里我們需要真正的創建DOM元素,并且添加事件監聽器等等。
6)接著,我們繼續處理DOM元素的子元素。按之前的步驟創建實例并掛載它們,根據子元素的類型,自定義組件還是html標簽,來決定調用步驟1還是步驟5.直到遞歸完所有的內嵌元素。
整個過程就是如此,像你看到的一樣簡潔明了。
掛載的過程基本完成了。我們將componentDidMount方法入棧。
(未完待續)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/95828.html
摘要:技術上來說,當方法被調用后或者發生改變后,方法都會被調用。下一步,會設置為。之后,檢測當前更新是否由更新引起的。這是因為,使用是導致組件持久化更新,而會被方法的返回值重新賦值。 接上文, React流程圖:https://bogdan-lyashenko.gith... 更新組件 關于組件的更新,我們先看下代碼里的注釋: 對于已掛載組件的更新過程,React會首先調用component...
摘要:接上文,流程圖我們已經知道掛載的工作流程,現在我們換個方向研究下方法,這個也是的重要組成部分。這個問題,我們會在下一篇文章中進行解答。。。 接上文, React流程圖:https://bogdan-lyashenko.gith... this.setState 我們已經知道掛載的工作流程,現在我們換個方向研究下--setState方法,這個也是React的重要組成部分。 首先,為什么我...
摘要:當鼠標事件發生時,組件的最外層會進行處理,然后通過幾層包裝器的處理后,會開始進行批量更新操作。在這之后,會將這些事件處理成常見到樣子。 接上文, React流程圖:https://bogdan-lyashenko.gith... 回到最初 在流程圖中,也許你已經注意到,setState方法可以通過幾種方式觸發,更準確的說,可以分為是否由外部引起的(也就是是否由用戶觸發)。讓我們看下如下...
摘要:接著,將返回的元素和之前的進行比較的,以驗證是否真的需要更新。我們看下代碼,代碼比較簡單好,對應于我們的這個列子,我們對于方法的更改并不會對方法造成影響。所以我們進入下一步,也就是對于節點的更新。 接上文, React流程圖:https://bogdan-lyashenko.gith... 如果組件真的需要更新 在組件剛開始更新過程時,如果有定義componentWillUpdate方...
摘要:接上文,流程圖子組件掛載我們繼續探究方法。對于我們的實例代碼而言,就是標簽,所以沒有額外的處理過程。屬性驗證緊接著的被調用的驗證方法用于確保被正確設置,否則,會拋出異常。 接上文, React流程圖:https://bogdan-lyashenko.gith... 子組件掛載 我們繼續探究mount方法。 如果渲染的標簽里有復雜的html標簽,如video,form,textarea等...
閱讀 1331·2019-08-30 15:44
閱讀 1381·2019-08-29 18:42
閱讀 433·2019-08-29 13:59
閱讀 770·2019-08-28 17:58
閱讀 2811·2019-08-26 12:02
閱讀 2414·2019-08-23 18:40
閱讀 2406·2019-08-23 18:13
閱讀 3106·2019-08-23 16:27