最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關(guān)于Vue虛擬dom問題

 更新時間:2021年04月07日 14:29:59   作者:抽簪  
這篇文章主要介紹了Python合成Excel表的實(shí)現(xiàn)代碼(多sheet),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

一、什么是虛擬dom?

虛擬dom本質(zhì)上就是一個普通的JS對象,用于描述視圖的界面結(jié)構(gòu)

在這里插入圖片描述

在vue中,每個組件都有一個render函數(shù),

在這里插入圖片描述

沒有render找template,沒有template找el,有el就會把el.outHTML作為template,然后把這串字符串編譯成render函數(shù)。
有template就不往下找了。有render同理。

在這里插入圖片描述

每個render 函數(shù)都會返回一個虛擬dom樹,這也就意味著每個組件都對應(yīng)一棵虛擬DOM樹。
也就是說render目的就是創(chuàng)建虛擬dom,這個組件到底要顯示啥。
console.log(‘render'); ↓

在這里插入圖片描述
在這里插入圖片描述

題外:console.dir()可以顯示一個對象所有的屬性和方法。

在這里插入圖片描述

如果沒有return,這時候在頁面中是不存在真實(shí)dom的。
加上return↓

在這里插入圖片描述

h函數(shù)名字是自定義的,h函數(shù)結(jié)構(gòu),h(標(biāo)簽,{自身屬性},[子元素])
子元素繼續(xù)用h函數(shù)建,因?yàn)橛袆e的屬性
我們在[ ]里面再創(chuàng)建一個子元素

在這里插入圖片描述

h函數(shù)做了判斷,如果不是對象,就是文本節(jié)點(diǎn)了,↑認(rèn)為是省略掉了中間的配置

在這里插入圖片描述

在頁面內(nèi)渲染出來。
console.log(vnode);

在這里插入圖片描述

h1子元素↓

在這里插入圖片描述
在這里插入圖片描述

通過.elm對應(yīng)真實(shí)結(jié)點(diǎn)

h(‘h1','{{title}}')這種是肯定不行的,必須h(‘h1',this.title)

二、為什么需要虛擬dom

在vue 中,渲染視圖會調(diào)用render 函數(shù),這種渲染不僅發(fā)生在組件創(chuàng)建時,同時發(fā)生在視圖依賴的數(shù)據(jù)更新時。如果在渲染時,直接使用真實(shí) DOM ,由于真實(shí)DOM的創(chuàng)建、更新、插入等操作會帶來大量的性能損耗,從而就會極大的降低渲染效率。
因此, vue 在渲染時,使用虛擬dom來替代真實(shí)dom,主要為解決渲染效率的問題。

生成真實(shí)dom在第一次加載的時候沒有任何問題,因?yàn)闊o法避免,必要要生成真實(shí)dom。
render函數(shù)不止生成一次,它是每一次數(shù)據(jù)變化都要生成。
但是如果在render里用createElement每次都會生成全新的dom元素,開銷太大了

三、虛擬dom是如何轉(zhuǎn)換為真實(shí)dom的

在一個組件實(shí)例首次被渲染時,它先生成虛擬dom樹,深度優(yōu)先遍歷結(jié)點(diǎn),setAttribute,然后根據(jù)虛擬dom樹創(chuàng)建真實(shí)dom,并把真實(shí)dom掛載到頁面中合適的位置,直接替換掉div#app,此時,每個虛擬dom便會對應(yīng)一個真實(shí)的dom。

在這里插入圖片描述

是不等于的,因?yàn)橹苯犹鎿Q掉了div#app

如果一個組件受響應(yīng)式數(shù)據(jù)變化的影響,需要重新渲染時,它仍然會重新調(diào)用render函數(shù),創(chuàng)建出一個新的虛擬dom樹,用新樹和舊樹對比,通過對比,vue會找到最小更新量,然后更新必要的真實(shí)dom節(jié)點(diǎn)
這樣一來,就保證了對真實(shí)dom達(dá)到最小的改動。

在這里插入圖片描述

通過diff算法查看那兩個虛擬dom是不一樣的,然后去改動對應(yīng)結(jié)點(diǎn)的真實(shí)dom完成效果,保證改動最少,提高效率

四、模板和虛擬dom的關(guān)系

在這里插入圖片描述

腳手架搭的虛擬dom

vue框架中有一個compile模塊,它主要負(fù)責(zé)將模板轉(zhuǎn)換為render函數(shù),而render函數(shù)調(diào)用后將得到虛擬dom。

編譯的過程分兩步,(babel和webpack都是這么創(chuàng)建的):

將模板字符串轉(zhuǎn)換成為AST(抽象語法樹,用樹形結(jié)構(gòu)描述我們的東西)將AST轉(zhuǎn)換為render函數(shù)

AST↓,提一嘴AST用棧搭建的

在這里插入圖片描述

如果使用傳統(tǒng)的引入方式(src),則編譯時間發(fā)生在組件第一次加載時,這稱之為運(yùn)行時編譯。再提一嘴,第1步非常耗時。
如果是在vue-cli的默認(rèn)配置下,編譯發(fā)生在打包時,這稱之為模板預(yù)編譯。
編譯是一個極其耗費(fèi)性能的操作,預(yù)編譯可以有效的提高運(yùn)行時的性能,而且,由于運(yùn)行的時候已不需要編譯,vue-cli在打包時會排除掉vue中的compile模塊,以減少打包體積

如果上面不寫模板template

在這里插入圖片描述
在這里插入圖片描述

會報錯,但是你可以在vue.config.js配置

module.export={runtimeCompiler:true}

不建議,會加入編譯內(nèi)容,使內(nèi)容變多。(再提一嘴esbuild和vite加速打包,?沒用過)

模板的存在,僅僅是為了讓開發(fā)人員更加方便的書寫界面代碼
vue最終運(yùn)行的時候,最終需要的是render函數(shù),而不是模板,因此,模板中的各種語法,在虛擬dom中都是不存在的,它們都會變成虛擬dom的配置

在這里插入圖片描述

等同于

在這里插入圖片描述

案例:自動生成目錄

現(xiàn)在需要制作一個組件,該組件可以根據(jù)其插槽中的內(nèi)容,自動生成一個目錄。

在這里插入圖片描述
在這里插入圖片描述

到此這篇關(guān)于關(guān)于Vue虛擬dom問題的文章就介紹到這了,更多相關(guān)Vue虛擬dom內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家

相關(guān)文章

  • mint-ui如何自定義messageBox樣式

    mint-ui如何自定義messageBox樣式

    這篇文章主要介紹了mint-ui如何自定義messageBox樣式問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • Vue路由vue-router用法講解

    Vue路由vue-router用法講解

    這篇文章介紹了Vue路由vue-router的用法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-01-01
  • 使用kbone解決Vue項(xiàng)目同時支持小程序問題

    使用kbone解決Vue項(xiàng)目同時支持小程序問題

    這篇文章主要介紹了使用kbone解決Vue項(xiàng)目同時支持小程序問題,本文通過一個todo的例子跟大家詳細(xì)介紹,需要的朋友可以參考下
    2019-11-11
  • vue項(xiàng)目中禁用瀏覽器緩存配置案例

    vue項(xiàng)目中禁用瀏覽器緩存配置案例

    這篇文章主要介紹了vue項(xiàng)目中禁用瀏覽器緩存配置案例,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • vue中keep-alive、activated的探討和使用詳解

    vue中keep-alive、activated的探討和使用詳解

    這篇文章主要介紹了vue中keep-alive、activated的探討和使用詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • 如何使用?vxe-table?將行數(shù)據(jù)標(biāo)記為刪除狀態(tài)

    如何使用?vxe-table?將行數(shù)據(jù)標(biāo)記為刪除狀態(tài)

    vxe-table支持將數(shù)據(jù)標(biāo)記為待刪除狀態(tài),通過調(diào)用setPendingRow方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2025-01-01
  • Vue如何實(shí)現(xiàn)table表格置頂

    Vue如何實(shí)現(xiàn)table表格置頂

    這篇文章主要介紹了Vue如何實(shí)現(xiàn)table表格置頂,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • Vue源碼探究之狀態(tài)初始化

    Vue源碼探究之狀態(tài)初始化

    這篇文章主要介紹了Vue源碼探究之狀態(tài)初始化,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • 一文完全掌握Vue中的$set方法

    一文完全掌握Vue中的$set方法

    這篇文章主要給大家介紹了關(guān)于如何完全掌握Vue中$set方法的相關(guān)資料,vue中$set方法對數(shù)組和對象的處理本質(zhì)上的一樣的,對新增的值添加響應(yīng)然后手動觸發(fā)派發(fā)更新,需要的朋友可以參考下
    2023-11-11
  • 淺談vue-cli 3.0.x 初體驗(yàn)

    淺談vue-cli 3.0.x 初體驗(yàn)

    這篇文章主要介紹了淺談vue-cli 3.0.x 初體驗(yàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04

最新評論

张家港市| 光山县| 泰和县| 科技| 榆中县| 涡阳县| 周宁县| 玉门市| 金坛市| 根河市| 大港区| 乐亭县| 阜宁县| 杂多县| 疏附县| 海兴县| 泾川县| 社旗县| 永丰县| 平谷区| 南皮县| 常宁市| 沅陵县| 郸城县| 龙泉市| 榆中县| 伊春市| 道孚县| 方山县| 荥经县| 调兵山市| 青铜峡市| 剑阁县| 礼泉县| 左云县| 广水市| 镇江市| 郁南县| 禹州市| 闸北区| 临湘市|