版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、黃瓊(黃瓊(daisyhhuangdaisyhhuang)騰訊前端工程師,騰訊前端工程師,IMWebIMWeb團隊成員團隊成員企鵝輔導企鵝輔導IMWebIMWeb 社區(qū)社區(qū)郵箱:郵箱:微信:微信:you-you-qiongqiong- -yueyue一、JSX如何生成element二、element如何生成真實DOM節(jié)點三、性能優(yōu)化四、React 16異步渲染方案一、一、JSXJSX如何生成如何生成elementelement二、element如何生成realDOM三、性能優(yōu)化四、React 16異步渲染方案createElementcreateElement的作用是生成的作用是生成eleme
2、nt,element, 參數(shù)如下參數(shù)如下1 1、typetype2 2、attributesattributes,如果沒有的話,可以為,如果沒有的話,可以為nullnull3 3、childrenchildrenBabelreturn( Hello, This is React Start to learn right now!Right Reserve. )return(React.createElement(div, className: cn ,React.createElement(Header,null,Hello, This is React),React.createElemen
3、t(div,null,Start to learn right now!),Right Reserve)React.createElement( div, className: cn , React.createElement( Header, null, Hello, This is React ), React.createElement( div, null, Start to learn right now! ), Right Reserve)type: div,props: className: cn,children: type: function Header,props: ch
4、ildren: Hello, This is React,type: div,props: children: start to learn right now!,Right ReserveReact.createElementReact.createElement 何時被執(zhí)行?何時被執(zhí)行?RenderRender 函數(shù)被調(diào)用的函數(shù)被調(diào)用的時候執(zhí)行時候執(zhí)行ChildrenChildren現(xiàn)在看到有三種類型:現(xiàn)在看到有三種類型:1 1、StringString,2 2、原生、原生DOMDOM節(jié)點的節(jié)點的elementelement3 3、ReactReact componentscomponen
5、ts 自定義組件自定義組件的的elementelement4 4、false,false, null,undefinednull,undefined,numbernumber5 5、數(shù)組、數(shù)組 使用使用mapmap方法的時候方法的時候type: div,props: className: cn,children: type: function Header,props: children: Hello, This is React,type: div,props: children: start to learn right now!,Right Reserve不單單是Object類型一、一、
6、JSXJSX如何生成如何生成elementelement二、二、elementelement如何生成如何生成realDOMrealDOM三、性能優(yōu)化三、性能優(yōu)化四、四、ReactReact 1616異步渲染方案異步渲染方案私有類私有類: : ReactReact自己使用,不會暴露給用戶自己使用,不會暴露給用戶, ,常用方法:常用方法:mountComponentmountComponent, , updateComponentupdateComponent等等公共類:自定義的組件公共類:自定義的組件 初始化elementReactDOMComponentReactCompositeCompon
7、entWrapperReactDOMTextComponentReactDOMEmptyComponentReactDOMComponentReactCompositeComponentWrapperReactDOMTextComponentReactDOMEmptyComponentmountComponentmountComponent(containercontainer): : 會將會將elementelement轉(zhuǎn)成真實轉(zhuǎn)成真實DOMDOM節(jié)點,并節(jié)點,并且插入到相應的且插入到相應的containercontainer里,然后返回里,然后返回markupmarkup(realreal
8、 DOMDOM)。)。 type: div,props: className: cn,children: Hello world,直接操作瀏覽器DOM元素mountComponent(container) const domElement = document.createElement(this._currentElement.type);const textNode = document.createTextNode(this._currentEps.children);domElement.appendChild(textNode);container.appendC
9、hild(domElement);return domElement;mountComponentmountComponent: : 實例化自定義組件,最后是通過遞歸調(diào)用到實例化自定義組件,最后是通過遞歸調(diào)用到ReactDOMComponentReactDOMComponent的的mountComponentmountComponent方法方法來得到真實來得到真實DOMDOM。ExampleExampleHelloHello World!World!React.renderReact.render(Example/, containercontainer)ReactCompositeCompo
10、nentWrapperReactCompositeComponentWrapperReactDOMComponentReactDOMComponentmountComponentmountComponent: :1 1、實例化、實例化ExampleExample,得到,得到instanceinstance對象對象2 2、renderedElementrenderedElement = = Instance.renderInstance.render();();3 3、初始化、初始化renderedElementrenderedElement ,得到,得到childchild4 4、child.
11、child.mountComponentmountComponent(container)(container)mountComponentmountComponent:根據(jù)根據(jù)elementelement來生成對應的真實來生成對應的真實DOMDOM節(jié)點節(jié)點componentWillMountcomponentWillMountcomponentDidMountcomponentDidMountHelloHello World!World! type: div,type: div, props: props: children: Hello Worldchildren: Hello World
12、 type: function Example,type: function Example, props: props: children: nullchildren: null 生命周期生命周期生命周期函數(shù)在哪被生命周期函數(shù)在哪被調(diào)用?調(diào)用?遞歸調(diào)用遞歸調(diào)用圖片來源更新更新propspropsstatestatesetStatesetState將傳入的將傳入的statestate放進放進pendingStatependingState的數(shù)組里的數(shù)組里updateComponentupdateComponent用于直接操作更新瀏覽器用于直接操作更新瀏覽器DOMDOM元素元素shouldCom
13、ponentUpdateshouldComponentUpdatecomponentWillUpdatecomponentWillUpdatecomponentDidUpdatecomponentDidUpdateupdateComponentupdateComponent1 1、計算出、計算出nextStatenextState2 2、render()render()得到得到nextRenderElementnextRenderElement3 3、與、與prevElementprevElement 進行進行Diff Diff 比較比較, ,更新節(jié)點更新節(jié)點ReactCompositeCom
14、ponentWrapperReactCompositeComponentWrapperReactDOMComponentReactDOMComponent否否dirtyComponentdirtyComponent是是當前是否處于批量更新當前是否處于批量更新遍歷更新遍歷更新 dirtyComponentdirtyComponent生命周期生命周期生命周期函數(shù)在哪被調(diào)生命周期函數(shù)在哪被調(diào)用?用?圖片來源1 1、兩個相同的組件產(chǎn)生類似的兩個相同的組件產(chǎn)生類似的DOMDOM結(jié)構(gòu),不同組件產(chǎn)生不同結(jié)構(gòu),不同組件產(chǎn)生不同DOMDOM結(jié)構(gòu)結(jié)構(gòu)2 2、對于同一層級的一組子節(jié)點,它們可以通過唯一的對于同一層級
15、的一組子節(jié)點,它們可以通過唯一的id id區(qū)分區(qū)分A AB BC CD DB BC C更新更新1 1、不同節(jié)點類型、不同節(jié)點類型D DB BC CTips:Tips:保持保持DOMDOM標簽類型的穩(wěn)定標簽類型的穩(wěn)定2、相同節(jié)點類型自定義組件3、子節(jié)點比較ABCCABCDTips: 1、保持DOM結(jié)構(gòu)的穩(wěn)定性2、map的時候,加key一、JSX如何生成element二、element如何生成realDOM三、性能優(yōu)化四、React 16異步渲染方案1、why-did-you-update工具介紹2、react-addons-perf工具介紹1 1、Mount/Mount/UnmountUnmou
16、nt KeyKey 穩(wěn)定性穩(wěn)定性 - - 保持標簽的穩(wěn)定保持標簽的穩(wěn)定 - - - 保持保持DOMDOM結(jié)構(gòu)的穩(wěn)定結(jié)構(gòu)的穩(wěn)定2 2、避免重復渲染避免重復渲染 shouldComponentUpdateshouldComponentUpdate PureComponentPureComponent( (immutable.jsimmutable.js) ) 分離組件,只傳入關(guān)心的值分離組件,只傳入關(guān)心的值3 3、使用、使用PurePure FunctionalFunctional ComponentComponentrecomposerecompose是否寫組件的時候都直是否寫組件的時候都直接使
17、用接使用PureComponentPureComponent? ?目前目前reactreact 性能優(yōu)化的點主要集中在防止重復渲染,性能優(yōu)化的點主要集中在防止重復渲染,DOMDOM穩(wěn)定性的方穩(wěn)定性的方面:面:但是大家看一個但是大家看一個問題問題:ABCDEFG一、一、JSXJSX如何生成如何生成elementelement二、二、elementelement如何生成如何生成realDOMrealDOM三、性能優(yōu)化三、性能優(yōu)化四、四、ReactReact 1616異步渲染方案異步渲染方案1 1、比較階段、比較階段 可被打斷可被打斷2 2、commitcommit階段階段 不可被打斷不可被打斷St
18、ack reconcilerFiber reconciler圖片來源PhasePhase 1 1 Reconciliation/renderReconciliation/renderPhasePhase 2 2 commitcommitcomponentWillMountcomponentWillMountcomponentWillReceivePropscomponentWillReceivePropscomponentWillUpdatecomponentWillUpdateshouldComponentUpdateshouldComponentUpdatecomponentDidMountcomponentDidMountcomponentDidUpdatecomponentDidUpdatecomponentWillUnmountcomponentWillUnmo
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 4 四季 說課稿-2024-2025學年語文一年級上冊統(tǒng)編版
- 9-2《永遇樂·京口北固亭懷古》 說課稿 2024-2025學年統(tǒng)編版高中語文必修上冊
- 羽毛球:發(fā)網(wǎng)前球+反手挑球+正手擊打高遠球 說課稿-2023-2024學年高二上學期體育與健康人教版必修第一冊
- Unit 3Amazing animals Part B Let's learn 第5課時(說課稿)-2024-2025學年人教PEP版(2024)英語三年級上冊
- Unit 5 Preparing for the Topic Function 說課稿- 2024-2025學年仁愛科普版英語七年級上冊
- Module 2 Public Holiday Unit 2說課稿2024-2025學年外研版英語九年級上冊
- 二手按揭房買賣合同2024年版模板
- 2025年度綠色洗潔精研發(fā)與應用合作協(xié)議3篇
- 2025年華師大版三年級數(shù)學上冊月考試卷含答案
- 第三單元第一節(jié) 地球的自轉(zhuǎn) 說課稿-2024-2025學年粵人版地理七年級上冊
- 2023年數(shù)學競賽AMC8試卷(含答案)
- SMA分子檢測進展
- 醫(yī)師定期考核機構(gòu)信息登記表
- 風力發(fā)電風機拆除方案
- 杭州出租車區(qū)域考試復習備考題庫(含答案)
- 普通高中地理課程標準簡介課件
- 根號2有多大?數(shù)學課件
- 醫(yī)院住院醫(yī)師規(guī)范化培訓證明(樣本)
- GB/T 13634-2000試驗機檢驗用測力儀的校準
- 中小學道德與法治高級教師職稱評審答辯題目與答案
- 項目前期投標文件技術(shù)標
評論
0/150
提交評論