VNode虛擬節(jié)點實例簡析
VNode說明&作用
VNode是什么
VNode是JavaScript對象。VNode表示Virtual DOM
,用JavaScript
對象來描述真實的DOM
把DOM
標簽,屬性,內(nèi)容都變成對象的屬性。就像使用JavaScript
對象對一種動物進行說明一樣{name: 'Hello Kitty', age: 1, children: null}
。
VNode的作用
通過render
將template
模版描述成VNode
,然后進行一系列操作之后形成真實的DOM
進行掛載。
VNode的優(yōu)點
- 兼容性強,不受執(zhí)行環(huán)境的影響。
VNode
因為是JS
對象,不管Node
還是瀏覽器,都可以統(tǒng)一操作,從而獲得了服務(wù)端渲染、原生渲染、手寫渲染函數(shù)等能力。 - 減少操作
DOM
,任何頁面的變化,都只使用VNode
進行操作對比,只需要在最后一步掛載更新DOM
,不需要頻繁操作DOM
,從而提高頁面性能。
VNode如何生成
在Vue
源碼中,VNode
是通過一個構(gòu)造函數(shù)生成的。
export default class VNode { constructor ( tag?: string, data?: VNodeData, children?: ?Array<VNode>, text?: string, elm?: Node, context?: Component, componentOptions?: VNodeComponentOptions, asyncFactory?: Function ) { this.tag = tag this.data = data this.children = children this.text = text this.elm = elm this.ns = undefined this.context = context this.fnContext = undefined this.fnOptions = undefined this.fnScopeId = undefined this.key = data && data.key this.componentOptions = componentOptions this.componentInstance = undefined this.parent = undefined this.raw = false this.isStatic = false this.isRootInsert = true this.isComment = false this.isCloned = false this.isOnce = false this.asyncFactory = asyncFactory this.asyncMeta = undefined this.isAsyncPlaceholder = false } }
VNode
構(gòu)造函數(shù)看起來十分簡單,先走一遍VNode
的生成過程。
// 模版 <a href="#" rel="external nofollow" > generator VNode </a> // VNode描述 { tag: 'a', data: { calss: 'demo', attrs: { href: '#' }, style: { color: 'red' } }, children: ['generator VNode'] }
這個JS
對象,已經(jīng)囊括了整個模板的所有信息,完全可以根據(jù)這個對象來構(gòu)造真實DOM
。
VNode存放哪些信息
- data:存儲節(jié)點的屬性,綁定的事件等
- elm:真實DOM 節(jié)點
- context:渲染這個模板的上下文對象
- isStatic:是否是靜態(tài)節(jié)點
…
VNode存放
在初始化完選項,解析完模板之后,就需要掛載DOM
了。此時就需要生成VNode
,才能根據(jù) VNode
生成DOM
然后掛載。創(chuàng)建出來的VNode
需要被存起來,主要存放在三個位置:parent
,_vnode
,$vnode
。
后記
VNode虛擬節(jié)點是Vue框架中一個非常重要的概念,深入的學(xué)習與了解,有助于進一步加深對Vue框架的理解與運用。
相關(guān)文章
淺談vuejs實現(xiàn)數(shù)據(jù)驅(qū)動視圖原理
這篇文章主要介紹了淺談vuejs實現(xiàn)數(shù)據(jù)驅(qū)動視圖原理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-02-02關(guān)于ElementUI自定義Table支持render
這篇文章主要介紹了關(guān)于ElementUI自定義Table支持render,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-10-10前端框架學(xué)習總結(jié)之Angular、React與Vue的比較詳解
這篇文章主要跟大家分享了關(guān)于前端框架中Angular.js、React.js與Vue.js的全方位比較,文章介紹的非常詳細,對大家進行區(qū)分對比這三者之間的差異區(qū)別很有幫助,需要的朋友可以參考借鑒,下面來一起看看吧。2017-03-03