久久99久久人婷婷精品综合_超碰aⅴ人人做人人爽欧美_亚洲电影第三页_日韩欧美一中文字暮专区_波多野结衣的一区二区三区_婷婷在线播放_人人视频精品_国产精品日韩精品欧美精品_亚洲免费黄色_欧美性猛交xxxxxxxx

如何從React渲染流程分析Diff算法-創新互聯

這篇文章主要介紹了如何從React渲染流程分析Diff算法,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

站在用戶的角度思考問題,與客戶深入溝通,找到中山網站設計與中山網站推廣的解決方案,憑借多年的經驗,讓設計與互聯網技術結合,創造個性化、用戶體驗好的作品,建站類型包括:成都網站設計、網站建設、企業官網、英文網站、手機端網站、網站推廣、域名申請、網頁空間、企業郵箱。業務覆蓋中山地區。

React中最神奇的部分莫過于虛擬DOM,以及其高效的Diff算法。這讓我們可以無需擔心性能問題而”毫無顧忌”的隨時“刷新”整個頁面,由虛擬DOM來確保只對界面上真正變化的部分進行實際的DOM操作。React在這一部分已經做到足夠透明,在實際開發中我們基本無需關心虛擬DOM是如何運作的。然而,理解其運行機制不僅有助于更好的理解React組件的生命周期,而且對于進一步優化React程序也會有很大幫助。

1、什么是虛擬DOM

在React中,render執行的結果得到的并不是真正的DOM節點,結果僅僅是輕量級的JavaScript對象,我們稱之為virtual DOM。

簡單的說,其實所謂的virtual DOM就是JavaScript對象到Html DOM節點的映射;即使用JavaScript對象將Html結構表示出來,而這個對象就是virtual DOM。

eg:

Html:

<ul id='list'>
 <li class='item'>Item 1</li>
 <li class='item'>Item 2</li>
</ul>

JavaScript對象表示(virtual DOM)

{
 tagName: 'ul',
 props: {
 id: 'list'
 },
 children: [
 {tagName: 'li', props: {class: 'item'}, children: ["Item 1"]},
 {tagName: 'li', props: {class: 'item'}, children: ["Item 2"]},
 ]
}

2、什么時候會生成到virtual DOM

React生命周期擁有裝載、更新、卸載的三個階段;附上一張React生命周期圖

如何從React渲染流程分析Diff算法

前面提到:render執行的結果得到的并不是真正的DOM節點,結果僅僅是輕量級的JavaScript對象,即在render函數調用時將會創建出虛擬DOM;

class Tab extends React.Component {
 render() {
 React.createElement(
  'p',
  { className: 'class'},
  'Hello React'
 )
 }
}

如何從React渲染流程分析Diff算法

通過React.createElemen創建出虛擬DOM,而該函數只在Render函數中調用,所以在React裝載和更新的過程中才會有虛擬DOM的生成;至于掛載到真實DOM自然而然是ReactDom.render函數啦。

3、virtual DOM如何實現

實現其實很簡單,主要是定義一個函數并把我們傳進去的參數組成一個React元素對象,而type就是我們傳進去的組件類型,可以是一個類、函數或字符串(如'div')

React大致源碼:

function createElement(type, config, children) {
 let propName;

 const props = {};

 let key = null;
 let ref = null;
 let self = null;
 let source = null;

 if (config != null) {
 if (hasValidRef(config)) {
 // 如果有ref,將它取出來
 ref = config.ref;
 }
 if (hasValidKey(config)) {
 // 如果有key,將它取出來
 key = '' + config.key;
 }

 self = config.__self === undefined ? null : config.__self;
 source = config.__source === undefined ? null : config.__source;
 
 for (propName in config) {
 if (
 hasOwnProperty.call(config, propName) &&
 !RESERVED_PROPS.hasOwnProperty(propName)
 ) {
 // 將除ref,key等這些特殊的屬性放到新的props對象里
 props[propName] = config[propName];
 }
 }
 }

 // 獲取子元素
 const childrenLength = arguments.length - 2;
 if (childrenLength === 1) {
 props.children = children;
 } else if (childrenLength > 1) {
 const childArray = Array(childrenLength);
 for (let i = 0; i < childrenLength; i++) {
 childArray[i] = arguments[i + 2];
 }
 props.children = childArray;
 }

 // 添加默認props
 if (type && type.defaultProps) {
 const defaultProps = type.defaultProps;
 for (propName in defaultProps) {
 if (props[propName] === undefined) {
 props[propName] = defaultProps[propName];
 }
 }
 }
 
 return ReactElement(
 type,
 key,
 ref,
 self,
 source,
 ReactCurrentOwner.current,
 props,
 );
}

const ReactElement = function(type, key, ref, self, source, owner, props) {
 // 最終得到的React元素
 const element = {
 // This tag allows us to uniquely identify this as a React Element
 $$typeof: REACT_ELEMENT_TYPE,

 // Built-in properties that belong on the element
 type: type,
 key: key,
 ref: ref,
 props: props,

 // Record the component responsible for creating this element.
 _owner: owner,
 };

 return element;
};

打印出組件:

如何從React渲染流程分析Diff算法

4、為什么需要使用virtual DOM

DOM管理歷史階段:

  1. JS 或者 jQuery 操作 DOM: 當應用程序越來越復雜,需要在JS里面維護的字段也越來越多,需要監聽事件和在事件回調用更新頁面的DOM操作也越來越多,應用程序會變得非常難維護。

  2. 后來產出 MVC、MVP 的架構模式,期望從代碼組織方式來降低維護難度。但是 MVC 架構并沒辦法減少維護的狀態,也沒有降低狀態更新時需要對頁面的更新操作,你需要操作的DOM還是需要操作,只是換了個地方。

  3. 既然狀態改變了要操作相應的DOM元素,為什么不做一個東西讓視圖和狀態進行綁定,狀態變更了視圖自動變更。這就是后來人們想出了 MVVM 模式,只要在模版中聲明視圖組件是和什么狀態進行綁定的,雙向綁定引擎就會在狀態更新的時候自動更新視圖;

  4. 但MVVM雙向數據綁定并不是唯一的辦法,還有一個非常直觀的方法:一旦狀態發生了變化,就用模版引擎重新渲染整個視圖,然后用新的視圖更換掉舊的視圖。

React采用的就是第四種模式;但是我們都知道對于操作DOM成本太高,而相對操作JavaScript就快速多了,而Html DOM可以很簡單的用JavaScript對象表示出來(Virtual DOM就這樣誕生了)

這樣的做法會導致很多的問題,大的問題就是這樣做會很慢,因為即使一個小小的狀態變更都要重新構造整棵 DOM,性價比太低;而React Virtual DOM在狀態更新過程加了一些特別的操作來避免整棵 DOM 樹變更(它就是接下來的Diff算法)。

感謝你能夠認真閱讀完這篇文章,希望小編分享的“如何從React渲染流程分析Diff算法”這篇文章對大家有幫助,同時也希望大家多多支持創新互聯,關注創新互聯行業資訊頻道,更多相關知識等著你來學習!

分享名稱:如何從React渲染流程分析Diff算法-創新互聯
標題網址:http://www.js-pz168.com/article36/ghepg.html

成都網站建設公司_創新互聯,為您提供網頁設計公司自適應網站標簽優化關鍵詞優化ChatGPT虛擬主機

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都做網站
久久99久久人婷婷精品综合_超碰aⅴ人人做人人爽欧美_亚洲电影第三页_日韩欧美一中文字暮专区_波多野结衣的一区二区三区_婷婷在线播放_人人视频精品_国产精品日韩精品欧美精品_亚洲免费黄色_欧美性猛交xxxxxxxx
日韩福利视频导航| 俄罗斯精品一区二区三区| 99九九视频| 性刺激综合网| 欧美一区二区精品在线| 国产精品初高中害羞小美女文| 午夜成人免费视频| 不卡av在线网| 天堂av一区二区| 日韩美女在线视频| 亚洲综合丁香婷婷六月香| 国产+成+人+亚洲欧洲自线| 免费日韩电影在线观看| 7799精品视频| 依依成人综合视频| 高清成人免费视频| 日本一区视频在线观看免费| 日韩欧美综合在线| 亚洲一二三区在线观看| 波多野结衣一区二区三区| 亚洲第一在线综合在线| 2019国产精品| 毛片一区二区三区| 国产在线精品二区| 91精品国产美女浴室洗澡无遮挡| 亚洲视频在线观看三级| 国产91精品在线观看| 日韩欧美激情一区二区| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 91麻豆精品国产91久久久久| 亚洲欧美综合在线精品| 国产一区二区精品久久99| 久久国产一区| 欧美一区二区日韩| 亚洲午夜精品一区二区三区他趣| kk眼镜猥琐国模调教系列一区二区 | 免费国产在线精品一区二区三区| 欧美一级久久久| 亚洲成人福利片| 国产精品国产精品国产专区蜜臀ah| 欧美日韩一二区| 亚洲激情第一区| 91视频精品在这里| 欧美日韩在线一区二区| 一区二区三区电影在线播| 91在线无精精品入口| 欧美在线观看一区二区| 一区二区三区四区亚洲| 成人91视频| 91精品国产一区二区三区蜜臀| 一区二区三区四区蜜桃| 秋霞影院一区二区| 久久亚洲免费| 久久丝袜美腿综合| 狠狠网亚洲精品| 欧洲精品久久| 欧美激情在线一区二区三区| 国产精品资源在线观看| 在线视频不卡国产| 中文字幕一区在线观看| 99精品国产视频| 欧美另类高清zo欧美| 五月天网站亚洲| 精品在线一区| 久久久久久夜精品精品免费| 国产原创一区二区三区| 亚洲欧美在线网| 亚洲视频免费观看| 91九色露脸| 欧美xxxxxxxxx| 激情欧美一区二区三区在线观看| 午夜一区二区三区| 亚洲女与黑人做爰| 国产精品久久精品视| 日韩精品一区二区三区视频播放| 久久精品国产免费看久久精品| 亚洲国产日韩欧美| 亚洲精品国产品国语在线app| av成人免费观看| 久久久久久麻豆| 成人av综合一区| 欧美一级精品在线| 国产乱子伦一区二区三区国色天香 | 激情欧美一区二区| 色婷婷久久久综合中文字幕| 亚洲香蕉伊在人在线观| 青青草国产精品| 一区二区三区精品视频| 蜜桃av噜噜一区二区三| 成人欧美一区二区三区黑人麻豆| 99久久精品免费看国产一区二区三区| 精品粉嫩超白一线天av| 成人禁用看黄a在线| 日韩欧美黄色影院| 国v精品久久久网| 99在线观看视频| 久久久久久久电影| 99精品国产91久久久久久 | 高清在线观看日韩| 日韩午夜三级在线| 成人午夜激情视频| 日韩欧美国产综合| 成人影视亚洲图片在线| 欧美大胆一级视频| aaa欧美色吧激情视频| 精品国产乱码久久久久久闺蜜| 成人免费黄色在线| ww久久中文字幕| 91嫩草视频在线观看| 国产欧美精品一区aⅴ影院 | 色综合中文字幕国产 | 一区二区三区色| 色综合电影网| 天天影视网天天综合色在线播放| 中文字幕久久一区| 久久精品久久综合| 91麻豆精品国产自产在线| 高清视频一区二区| 久久亚洲欧美国产精品乐播 | 国产精品国产亚洲精品看不卡15| 国产精品视频一二三区| 国产综合av一区二区三区| 中文字幕一区二区在线播放 | 欧美日韩国产一级片| 国内偷窥港台综合视频在线播放| 欧美一区二区在线免费观看| 成人看片黄a免费看在线| 久久免费偷拍视频| 精品国产免费久久久久久尖叫| 亚洲品质自拍视频| 亚洲精品电影在线一区| 美美哒免费高清在线观看视频一区二区 | 亚洲黄色小视频| 色综合亚洲欧洲| 国产精品一卡二| 久久综合色天天久久综合图片| 国产精品区一区二区三在线播放| 亚洲品质自拍视频| 中文字幕成人一区| 国产电影一区二区三区| 久久久久久久久久电影| 免费日韩av电影| 免费精品视频在线| 日韩一二三区视频| 国产精品国产三级国产专区53| 亚洲综合激情小说| 欧美午夜影院一区| 不卡高清视频专区| 亚洲图片你懂的| 色综合天天狠狠| 懂色av一区二区在线播放| 国产精品网站一区| 亚洲欧美日韩精品综合在线观看| 国内精品国产成人国产三级粉色| 2017欧美狠狠色| 欧美一区1区三区3区公司| 美国三级日本三级久久99| 精品入口麻豆88视频| 久久av免费观看| 另类专区欧美蜜桃臀第一页| 精品免费国产一区二区三区四区| 精品无人区一区二区三区| 日本最新不卡在线| 精品免费一区二区三区| 欧美日韩国产高清视频| 久久www免费人成看片高清| 2021久久国产精品不只是精品| 久久久com| 精品一区二区三区在线播放| 国产三级精品视频| 亚洲一区三区电影在线观看| 国产成人欧美日韩在线电影| 国产精品毛片a∨一区二区三区| 中国成人亚色综合网站| 99精品欧美一区| 亚洲五月六月丁香激情| 日韩视频在线一区二区| 欧美国产一区二区在线| 国产酒店精品激情| 中文字幕一区二区三区在线观看 | 国产一区二区三区免费播放 | 午夜婷婷国产麻豆精品| 91精品国产一区二区| 久久精品美女| 国产在线观看一区二区| 亚洲欧洲美洲综合色网| 欧美日韩一区二区在线视频| 成人免费91在线看| 麻豆91免费看| 中文一区在线播放| 欧美日韩色一区| 久久久久久久久久久久久久一区 | 欧美日韩不卡在线| 国产亚洲自拍偷拍| 韩国视频一区二区| 亚洲免费观看视频| 日韩欧美三级在线| 亚洲精品一区二区三区蜜桃久| 成人免费视频播放| 天堂午夜影视日韩欧美一区二区|