Render函數(shù)是Vue2.x版本新增的一個函數(shù);使用虛擬dom來渲染節(jié)點提升性能,因為它是基于JavaScript計算。通過使用createElement(h)來創(chuàng)建dom節(jié)點。createElement是render的核心方法。其Vue編譯的時候會把template里面的節(jié)點解析成虛擬dom;
創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司是一家服務(wù)多年做網(wǎng)站建設(shè)策劃設(shè)計制作的公司,為廣大用戶提供了成都做網(wǎng)站、成都網(wǎng)站設(shè)計,成都網(wǎng)站設(shè)計,廣告投放平臺,成都做網(wǎng)站選創(chuàng)新互聯(lián),貼合企業(yè)需求,高性價比,滿足客戶不同層次的需求一站式服務(wù)歡迎致電。什么是虛擬dom?
虛擬dom不同于真正的dom,它是一個JavaScript對象。當(dāng)狀態(tài)發(fā)生變化的時候虛擬dom會進行一個diff判斷/運算;然后判斷哪些dom是需要被替換的而不是全部重繪,所以性能會比dom操作高很多。
下面看一張Aresn大神總結(jié)的一張圖:
Vue2.x版本中VNode屬性:
tag:當(dāng)前節(jié)點標(biāo)簽名,
data:當(dāng)前節(jié)點數(shù)據(jù)對象,
children:子節(jié)點數(shù)組,
text:當(dāng)前節(jié)點文本,
elm:當(dāng)前虛擬節(jié)點對應(yīng)的真實dom節(jié)點,
ns:節(jié)點的namespace( 名稱空間),
content:編譯作用域,
functionalContext:函數(shù)化組件的作用域,即全局上下文,
key:節(jié)點標(biāo)識,有利于patch優(yōu)化,
componentOptions:創(chuàng)建組件實例時的options,
child:當(dāng)前節(jié)點對應(yīng)的組件實例,
parent:組件的占位節(jié)點,
raw:原始html,
isStatic:是否是靜態(tài)節(jié)點,
isRootInsert:是否作為跟節(jié)點插入,若被
isComment:是否為注釋節(jié)點,
isCloned:是否為克隆節(jié)點,
isOnce:是否只改變(渲染)一次,或是否有v-once指令;
其中這里面又有幾種VNode類型:
Aresn大神總結(jié)的很好:
TextVNode:文本節(jié)點,
ElementVNode:普通元素節(jié)點,
ComponentVNode:組件節(jié)點,
EmptyVNode:空節(jié)點,或者說是沒有內(nèi)容的注釋節(jié)點,
CloneVNode:克隆節(jié)點,可以是以上任意類型節(jié)點
說了那么多;到底什么時候用虛擬dom才比較好呢?其實 我們使用的單文件組件就已經(jīng)夠好了。但是當(dāng)某些代碼冗余的時候如果寫單文件組件的話會有好多重復(fù)的內(nèi)容;
接下來介紹其核心函數(shù);
createElement:
createElement接收3個參數(shù):
第一個參數(shù)可以是HTML標(biāo)簽名,組件或者函數(shù)都可以;此參數(shù)是必須的;
第二個為數(shù)據(jù)對象(可選);
第三個為子節(jié)點(可選)。
附上一個非常簡單的createElement函數(shù)demo;
var app = new Vue({ el:"#app", render:createElement => { eturn createElement( 'h3', [ createElement( 'a', { domProps:{ href:"#biaoti" } }, "標(biāo)題" ) ] ); } });
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站www.cdcxhl.com,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。