render 函數(shù)理解

感覺(jué)render是為補(bǔ)救template缺點(diǎn)而誕生的

  • template是有標(biāo)簽航徙,根據(jù)標(biāo)簽插值內(nèi)容
  • render厲害一點(diǎn),可以渲染標(biāo)簽陷虎,并添加到虛擬DOM中
    注意下:
    1捉偏,template是模板語(yǔ)法,而render是js語(yǔ)法泻红,render其實(shí)是用來(lái)生成模板;
    2霞掺,render用多了谊路,發(fā)現(xiàn)挺麻煩,有一個(gè)插件jsx可以讓render代碼寫(xiě)得更自在

虛擬DOM

Vue通過(guò)建立一個(gè)虛擬DOM對(duì)真實(shí)DOM發(fā)生的變化保持追蹤菩彬。
return createElement('h1', 'Hello World!')
createElement 到底會(huì)返回什么呢缠劝?其實(shí)不是一個(gè)實(shí)際的 DOM 元素。它更準(zhǔn)確的名字是createNodeDescription骗灶,因?yàn)樗男畔?huì)告訴 Vue 頁(yè)面上需要渲染什么樣的節(jié)點(diǎn)惨恭,及其子節(jié)點(diǎn)。我們把這樣的節(jié)點(diǎn)描述為“虛擬節(jié)點(diǎn) (Virtual Node)”耙旦,也常簡(jiǎn)寫(xiě)它為“VNode”脱羡。“虛擬 DOM”是我們對(duì)由 Vue 組件樹(shù)建立起來(lái)的整個(gè) VNode 樹(shù)的稱呼免都。

render方法會(huì)傳入一個(gè)createElement函數(shù)锉罐,它是一個(gè)用于創(chuàng)建DOM元素或者用于實(shí)例化其他組件的構(gòu)造方法椭岩。render方法必須返回一個(gè)createElement函數(shù)的調(diào)用結(jié)果晒喷,也就是模版內(nèi)的頂層元素(這個(gè)方法在vue2的習(xí)慣性使用中經(jīng)常用h來(lái)命名)。
render 實(shí)例:

export default {
  render: function(createElement) {
        const menu_items = ["首頁(yè)","搜索","分類(lèi)","系統(tǒng)"]
        return createElement('ul', 
          menu_items.map(item => {
            return createElement('li', {
              class: {
                'uk-nav': true
              },
              domProps: {
                innerHTML: item
              }
            })
          })
        )
      },
}

相當(dāng)于模板語(yǔ)法:

<ul>
  <li v-for="item in menu_items"  :class="{'uk-nav': true}">
    {{ item }}
  </li>
</ul>

渲染結(jié)果:


7906F8BE-42CB-4370-A24D-57037D9ADAA8.png

createElement的定義

createElement(tag,data,children)

返回值vNode(虛擬節(jié)點(diǎn))

參數(shù)說(shuō)明:

    tag    類(lèi)型:String/Object/Function   說(shuō)明:一個(gè)HTML標(biāo)簽饿幅,組件類(lèi)型,或一個(gè)函數(shù)

    Data    類(lèi)型:Object                   說(shuō)明:一個(gè)對(duì)應(yīng)屬性的數(shù)據(jù)對(duì)象,用于向創(chuàng)建的節(jié)點(diǎn)對(duì)象設(shè)置屬性值

    Children  類(lèi)型:String/Array       說(shuō)明:子節(jié)點(diǎn)

向構(gòu)造的VNode對(duì)象設(shè)置文本時(shí)可以直接傳入字符串险领,例如:
    createElement('div','這是行內(nèi)文本')
    輸出結(jié)果就是:
    <div>這是行內(nèi)文本</div>

參考:https://www.cnblogs.com/qdcnbj/p/8313061.html

以下是我的代碼侨舆,如果有問(wèn)題,請(qǐng)指出一二

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Render</title>
  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
    <div id="container">
      <tb-heading></tb-heading>
    </div>
    
    <script>
    Vue.component('tb-heading', {
      render: function(createElement) {
        const menu_items = ["首頁(yè)","搜索","分類(lèi)","系統(tǒng)"]
        return createElement('ul', 
          menu_items.map(item => {
            return createElement('li', {
              class: {
                'uk-nav': true
              },
              domProps: {
                innerHTML: item
              }
            })
          })
        )
      },
    });
    new Vue({
      el: '#container',
      methods: {
      }
    });
    </script>
</body>
</html>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末绢陌,一起剝皮案震驚了整個(gè)濱河市挨下,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌下面,老刑警劉巖复颈,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡耗啦,警方通過(guò)查閱死者的電腦和手機(jī)凿菩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)帜讲,“玉大人衅谷,你說(shuō)我怎么就攤上這事∷平” “怎么了获黔?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)在验。 經(jīng)常有香客問(wèn)我玷氏,道長(zhǎng),這世上最難降的妖魔是什么腋舌? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任盏触,我火速辦了婚禮,結(jié)果婚禮上块饺,老公的妹妹穿的比我還像新娘赞辩。我一直安慰自己,他們只是感情好授艰,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布辨嗽。 她就那樣靜靜地躺著,像睡著了一般淮腾。 火紅的嫁衣襯著肌膚如雪糟需。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,554評(píng)論 1 305
  • 那天来破,我揣著相機(jī)與錄音篮灼,去河邊找鬼。 笑死徘禁,一個(gè)胖子當(dāng)著我的面吹牛诅诱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播送朱,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼娘荡,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了驶沼?” 一聲冷哼從身側(cè)響起炮沐,我...
    開(kāi)封第一講書(shū)人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎回怜,沒(méi)想到半個(gè)月后大年,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年翔试,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了轻要。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡垦缅,死狀恐怖冲泥,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情壁涎,我是刑警寧澤凡恍,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站怔球,受9級(jí)特大地震影響嚼酝,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜竟坛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一革半、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧流码,春花似錦、人聲如沸延刘。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)碘赖。三九已至驾荣,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間普泡,已是汗流浹背播掷。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留撼班,地道東北人歧匈。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像砰嘁,于是被迫代替她去往敵國(guó)和親件炉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 這篇筆記主要包含 Vue 2 不同于 Vue 1 或者特有的內(nèi)容矮湘,還有我對(duì)于 Vue 1.0 印象不深的內(nèi)容斟冕。關(guān)于...
    云之外閱讀 5,050評(píng)論 0 29
  • 前幾天想學(xué)學(xué)Vue中怎么編寫(xiě)可復(fù)用的組件,提到要對(duì)Vue的render函數(shù)有所了解缅阳】纳撸可仔細(xì)一想,對(duì)于Vue的ren...
    kangaroo_v閱讀 116,062評(píng)論 13 171
  • 回憶 這里我們將對(duì)render函數(shù)把template轉(zhuǎn)化成vnode的過(guò)程進(jìn)行介紹。 Vue.prototype....
    LoveBugs_King閱讀 939評(píng)論 0 0
  • vue2.0和1.0模板渲染的區(qū)別 Vue 2.0 中模板渲染與 Vue 1.0 完全不同秀撇,1.0 中采用的 Do...
    我是上帝可愛(ài)多閱讀 1,299評(píng)論 0 4
  • 文/連岳 張冰潔被公司停職了超棺,這是一件令人開(kāi)心的事。 張冰潔捌袜,就是幾天前方正證券飯局的偷拍者说搅。 告密者沒(méi)有立足之地...
    i夜聞閱讀 265評(píng)論 0 0