接上文,
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要領入棧。
(未完待續)