欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解操作虛擬dom模擬react視圖渲染

 更新時間:2018年07月25日 10:38:01   作者:danarrr  
這篇文章主要介紹了詳解操作虛擬dom模擬react視圖渲染,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

1.為什么要使用虛擬dom?

網(wǎng)頁性能優(yōu)化->盡量少操作DOM

2..虛擬DOM(Virtual DOM) VS js直接操作原生DOM(innerHTML)

function Raw() {
  var data = _buildData(),
    html = "";
  ...
  for(var i=0; i<data.length; i++) {
    var render = template;
    render = render.replace("{{className}}", "");
    render = render.replace("{{label}}", data[i].label);
    html += render;
  }
  ...
  container.innerHTML = html;
  ...
}

以下測試用例中雖然構(gòu)造了一個包含1000個Tag的String,并把它添加到DOM樹中,但是只做了一次DOM操作。然而,在實際開發(fā)過程中,這1000個元素更新可能分布在20個邏輯塊中,每個邏輯塊中包含50個元素,當頁面需要更新時,都會引起DOM樹的更新,上述代碼就近似變成了如下格式:

function Raw() {
  var data = _buildData(), 
    html = ""; 
  ... 
  for(var i=0; i<data.length; i++) { 
    var render = template; 
    render = render.replace("{{className}}", ""); 
    render = render.replace("{{label}}", data[i].label); 
    html += render; 
    if(!(i % 50)) {
      container.innerHTML = html;
    }
  } 
  ... 
}

實際場景:實際是一個組件里經(jīng)常包含多個局部視圖,小小的狀態(tài)變更都要重新構(gòu)造整棵 DOM,性價比太低。需要更新頁面較多局部視圖的時候,這樣的做法不可取。

3.MVVM模式和React的模板引擎。

  1. MVVM: Model-View-ViewModel MVVM 可以很好的降低我們維護狀態(tài) -> 視圖的復(fù)雜程度(大大減少代碼中的視圖更新邏輯)。MV*模式:只要在模版中聲明視圖組件是和什么狀態(tài)進行綁定的,雙向綁定引擎就會在狀態(tài)更新的時候自動。
  2. React渲染視圖原理:React setState之后會將傳入的參數(shù)對象與組件當前的狀態(tài)合并,React 會以相對高效的方式根據(jù)新的狀態(tài)構(gòu)建 React 元素樹并且著手重新渲染整個UI界面。React 會自動計算出新的樹與老樹的節(jié)點差異,然后根據(jù)差異對界面進行最小化重渲染。

4.Virtual DOM模擬ReactJS視圖渲染大致邏輯:

// 1. 構(gòu)建虛擬DOM
var tree = el('div', {'id': 'container'}, [
  el('h1', {style: 'color: blue'}, ['simple virtal dom']),
  el('p', ['Hello, virtual-dom']),
  el('ul', [el('li')])
])

// 2. 通過虛擬DOM構(gòu)建真正的DOM
var root = tree.render()
document.body.appendChild(root)

// 3. 生成新的虛擬DOM
var newTree = el('div', {'id': 'container'}, [
  el('h1', {style: 'color: red'}, ['simple virtal dom']),
  el('p', ['Hello, virtual-dom']),
  el('ul', [el('li'), el('li')])
])

// 4. 比較兩棵虛擬DOM樹的不同
var patches = diff(tree, newTree)

// 5. 在真正的DOM元素上應(yīng)用變更
patch(root, patches)

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • React中的Hooks進階理解教程

    React中的Hooks進階理解教程

    這篇文章主要介紹了React中的Hooks進階理解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • webpack 2的react開發(fā)配置實例代碼

    webpack 2的react開發(fā)配置實例代碼

    本篇文章主要介紹了webpack 2的react開發(fā)配置實例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • React中映射一個嵌套數(shù)組實現(xiàn)demo

    React中映射一個嵌套數(shù)組實現(xiàn)demo

    這篇文章主要為大家介紹了React中映射一個嵌套數(shù)組實現(xiàn)demo,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • 在react中使用windicss的問題

    在react中使用windicss的問題

    這篇文章主要介紹了在react中使用windicss的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • React 性能優(yōu)化之非必要的渲染問題解決

    React 性能優(yōu)化之非必要的渲染問題解決

    本文主要介紹了React 性能優(yōu)化之非必要的渲染問題解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-07-07
  • react純函數(shù)組件setState更新頁面不刷新的解決

    react純函數(shù)組件setState更新頁面不刷新的解決

    在開發(fā)過程中,經(jīng)常遇到組件數(shù)據(jù)無法更新,本文主要介紹了react純函數(shù)組件setState更新頁面不刷新的解決,感興趣的可以了解一下
    2021-06-06
  • 在React項目中實現(xiàn)一個簡單的錨點目錄定位

    在React項目中實現(xiàn)一個簡單的錨點目錄定位

    錨點目錄定位功能在長頁面和文檔類網(wǎng)站中非常常見,它可以讓用戶快速定位到頁面中的某個章節(jié),本文講給大家介紹一下React項目中如何實現(xiàn)一個簡單的錨點目錄定位,文中有詳細的實現(xiàn)代碼,需要的朋友可以參考下
    2023-09-09
  • react拖拽組件react-sortable-hoc的使用

    react拖拽組件react-sortable-hoc的使用

    本文主要介紹了react拖拽組件react-sortable-hoc的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • React之使用useState異步刷新的問題

    React之使用useState異步刷新的問題

    這篇文章主要介紹了React之使用useState異步刷新的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • React 中的 ForwardRef的使用示例詳解

    React 中的 ForwardRef的使用示例詳解

    forwardRef 相當于是為 ref 傳遞的一種方式,普通的函數(shù)式組件就是 Render,而 fowardRef 多加了 Ref 參數(shù),這篇文章主要介紹了React 中的 ForwardRef的使用示例詳解,需要的朋友可以參考下
    2024-06-06

最新評論