亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Vue2.x中的Render函數(shù)詳解

 更新時(shí)間:2017年05月30日 23:51:58   作者:leung_blog  
通常開(kāi)發(fā)vue我們使用的是模板語(yǔ)法,其實(shí)還有和react相同的語(yǔ)法,那就是render函數(shù),同樣支持jsx語(yǔ)法。Vue 的模板實(shí)際是編譯成了 render 函數(shù)。

Render函數(shù)是Vue2.x版本新增的一個(gè)函數(shù);使用虛擬dom來(lái)渲染節(jié)點(diǎn)提升性能,因?yàn)樗腔贘avaScript計(jì)算。通過(guò)使用createElement(h)來(lái)創(chuàng)建dom節(jié)點(diǎn)。createElement是render的核心方法。其Vue編譯的時(shí)候會(huì)把template里面的節(jié)點(diǎn)解析成虛擬dom;

什么是虛擬dom?

虛擬dom不同于真正的dom,它是一個(gè)JavaScript對(duì)象。當(dāng)狀態(tài)發(fā)生變化的時(shí)候虛擬dom會(huì)進(jìn)行一個(gè)diff判斷/運(yùn)算;然后判斷哪些dom是需要被替換的而不是全部重繪,所以性能會(huì)比dom操作高很多。

下面看一張Aresn大神總結(jié)的一張圖:

Vue2.x版本中VNode屬性:

tag:當(dāng)前節(jié)點(diǎn)標(biāo)簽名,

data:當(dāng)前節(jié)點(diǎn)數(shù)據(jù)對(duì)象,

children:子節(jié)點(diǎn)數(shù)組,

text:當(dāng)前節(jié)點(diǎn)文本,

elm:當(dāng)前虛擬節(jié)點(diǎn)對(duì)應(yīng)的真實(shí)dom節(jié)點(diǎn),

ns:節(jié)點(diǎn)的namespace( 名稱(chēng)空間),

content:編譯作用域,

functionalContext:函數(shù)化組件的作用域,即全局上下文,

key:節(jié)點(diǎn)標(biāo)識(shí),有利于patch優(yōu)化,

componentOptions:創(chuàng)建組件實(shí)例時(shí)的options,

child:當(dāng)前節(jié)點(diǎn)對(duì)應(yīng)的組件實(shí)例,

parent:組件的占位節(jié)點(diǎn),

raw:原始html,

isStatic:是否是靜態(tài)節(jié)點(diǎn),

isRootInsert:是否作為跟節(jié)點(diǎn)插入,若被<transition>包裹的節(jié)點(diǎn),該屬性值為false,

isComment:是否為注釋節(jié)點(diǎn),

isCloned:是否為克隆節(jié)點(diǎn),

isOnce:是否只改變(渲染)一次,或是否有v-once指令;

其中這里面又有幾種VNode類(lèi)型:

Aresn大神總結(jié)的很好:

TextVNode:文本節(jié)點(diǎn),

ElementVNode:普通元素節(jié)點(diǎn),

ComponentVNode:組件節(jié)點(diǎn),

EmptyVNode:空節(jié)點(diǎn),或者說(shuō)是沒(méi)有內(nèi)容的注釋節(jié)點(diǎn),

CloneVNode:克隆節(jié)點(diǎn),可以是以上任意類(lèi)型節(jié)點(diǎn)

說(shuō)了那么多;到底什么時(shí)候用虛擬dom才比較好呢?其實(shí) 我們使用的單文件組件就已經(jīng)夠好了。但是當(dāng)某些代碼冗余的時(shí)候如果寫(xiě)單文件組件的話(huà)會(huì)有好多重復(fù)的內(nèi)容;

接下來(lái)介紹其核心函數(shù);

createElement:

createElement接收3個(gè)參數(shù):

第一個(gè)參數(shù)可以是HTML標(biāo)簽名,組件或者函數(shù)都可以;此參數(shù)是必須的;

第二個(gè)為數(shù)據(jù)對(duì)象(可選);

第三個(gè)為子節(jié)點(diǎn)(可選)。

附上一個(gè)非常簡(jiǎn)單的createElement函數(shù)demo;

 var app = new Vue({
   el:"#app",
   render:createElement => {
     eturn createElement(
       'h2',
       [
         createElement(
           'a',
           {
             domProps:{
               href:"#biaoti"
             }
           },
           "標(biāo)題"
         )
        ]      
       );
 
     }
 });

這只是一個(gè)createElement函數(shù)的使用,而Vue2中VNodeData

class: v-bind/:class

style:v-bind/:style

attrs:dom屬性,如id

props:props,

on:自定義事件等,

 nativeOn:原生事件

像這些也可以在render函數(shù)中實(shí)現(xiàn),若VNode是組件或含有組件的slot,那么VNode必須是唯一。

像平常開(kāi)發(fā)過(guò)程中單文件組件中template寫(xiě)法更為簡(jiǎn)單,可讀性也高。如果是webpack進(jìn)行打包的話(huà)template也會(huì)預(yù)編譯成render函數(shù)。

這里demo栗子暫時(shí)還沒(méi)寫(xiě)那么多。這里只是一個(gè)簡(jiǎn)單的介紹。若有更好的歡迎大家一起學(xué)習(xí)討論。

相關(guān)文章

  • vue?electron實(shí)現(xiàn)無(wú)邊框窗口示例詳解

    vue?electron實(shí)現(xiàn)無(wú)邊框窗口示例詳解

    這篇文章主要為大家介紹了vue?electron實(shí)現(xiàn)無(wú)邊框窗口示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • vue項(xiàng)目中使用tinymce編輯器的步驟詳解

    vue項(xiàng)目中使用tinymce編輯器的步驟詳解

    本文分步驟給大家介紹了vue項(xiàng)目中使用tinymce編輯器的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-09-09
  • vue設(shè)置動(dòng)態(tài)請(qǐng)求地址的例子

    vue設(shè)置動(dòng)態(tài)請(qǐng)求地址的例子

    今天小編就為大家分享一篇vue設(shè)置動(dòng)態(tài)請(qǐng)求地址的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-11-11
  • element-ui 上傳圖片后清空?qǐng)D片顯示的實(shí)例

    element-ui 上傳圖片后清空?qǐng)D片顯示的實(shí)例

    今天小編就為大家分享一篇element-ui 上傳圖片后清空?qǐng)D片顯示的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-09
  • 使用Vue.js實(shí)現(xiàn)數(shù)據(jù)的雙向綁定

    使用Vue.js實(shí)現(xiàn)數(shù)據(jù)的雙向綁定

    在Vue.js中,雙向數(shù)據(jù)綁定是一項(xiàng)非常強(qiáng)大的功能,它能夠使數(shù)據(jù)和視圖之間保持同步,讓開(kāi)發(fā)者更加方便地操作數(shù)據(jù),在本文中,我們將介紹如何用Vue.js實(shí)現(xiàn)數(shù)據(jù)的雙向綁定,需要的朋友可以參考下
    2023-04-04
  • 如何在 Vue 表單中處理圖片

    如何在 Vue 表單中處理圖片

    這篇文章主要介紹了如何在 Vue 表單中處理圖片,幫助大家更好的理解和使用vue框架,感興趣的朋友可以了解下
    2021-01-01
  • Vue+Router+Element實(shí)現(xiàn)簡(jiǎn)易導(dǎo)航欄

    Vue+Router+Element實(shí)現(xiàn)簡(jiǎn)易導(dǎo)航欄

    這篇文章主要為大家詳細(xì)介紹了Vue+Router+Element實(shí)現(xiàn)簡(jiǎn)易導(dǎo)航欄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • vue-router的beforeRouteUpdate不觸發(fā)問(wèn)題

    vue-router的beforeRouteUpdate不觸發(fā)問(wèn)題

    這篇文章主要介紹了vue-router的beforeRouteUpdate不觸發(fā)問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • vue中下載文件的方法示例詳解

    vue中下載文件的方法示例詳解

    這篇文章主要介紹了vue中下載文件的方法,通過(guò)實(shí)例代碼講解了下載后端返回文件和下載本地文件,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • Vue3生命周期鉤子函數(shù)詳解

    Vue3生命周期鉤子函數(shù)詳解

    這篇文章主要為大家詳細(xì)介紹了Vue3生命周期鉤子函數(shù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01

最新評(píng)論