vue 的 render 函數(shù)

render 函數(shù)的基本用法

什么是render函數(shù)
vue通過(guò) template 來(lái)創(chuàng)建你的 HTML斤蔓。但是,在特殊情況下,這種寫(xiě)死的模式無(wú)法滿(mǎn)足需求,必須需要js的編程能力潭千。此時(shí),需要用render來(lái)創(chuàng)建HTML借尿。實(shí)際上用template來(lái)創(chuàng)建html 在 webpack 做編譯時(shí) template 會(huì)被編譯成 render 來(lái)運(yùn)行的刨晴。



語(yǔ)法
render(createElement){ return createElement() }
createElement() 有三個(gè)參數(shù):
第一個(gè)參數(shù),必選垛玻,為 HTML 標(biāo)簽或組件或函數(shù)割捅;
第二個(gè)參數(shù),可選帚桩,為數(shù)據(jù)對(duì)象,標(biāo)簽屬性等嘹黔;
第三個(gè)參數(shù)账嚎,可選,該標(biāo)簽內(nèi)容或子節(jié)點(diǎn)儡蔓;

看下面簡(jiǎn)單的例子:

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <style>
        .bg{
            background:#abcdef;
        }
    </style>
</head>
<body>
    <div id="dome">
        <div>{{message}}</div>
    </div>
    <script>
        new Vue({
            el:"#dome",
            data:{
                message:"hello world"
            },
            methods:{                  
                mouseOverLog(){
                    console.log(this.message)
                }
            },
             render(createElement){
                  // createElement(html標(biāo)簽, 標(biāo)簽屬性, 子元素)郭蕉。
                 return createElement(
                    "span", //第1個(gè)參數(shù) - html 標(biāo)簽
                    {       //第2個(gè)參數(shù) - 在一個(gè)對(duì)象里設(shè)置該標(biāo)簽屬性
                    
                        style: { marginLight: "8px", padding: "10px 20px", background: '#abcdef' },
                        on: {
                            click: () => {
                                console.log('click')
                            },
                            mouseover: () => {
                                console.log('mouseover');
                                this.mouseOverLog();
                            }
                        }
                    }, 
                    '我是內(nèi)容' //第3個(gè)參數(shù) - 該標(biāo)簽的子元素
                    )
                }

           
        });
    </script>
</body>
</html>



當(dāng) createElement 的第三個(gè)元素為多個(gè)子元素時(shí)應(yīng)用數(shù)組來(lái)包裹。

new Vue({
            el:"#dome",
            data:{
                message:"hello world"
            },
            render(createElement){
                return createElement(
                    "ul",
                    {
                       class:{bg:true},
                    },

                    [
                        createElement("li", this.message),
                        createElement("li",'hello world 2'),
                    ]
                );
            }
        });



什么時(shí)候會(huì)用到render函數(shù)

情景1: https://juejin.im/post/5a715ec96fb9a01cad7c7958
情景2:
當(dāng)用 vue-cli 創(chuàng)建項(xiàng)目時(shí)喂江,在main.js文件能看到如下代碼

import Vue from 'vue'
import App from './App.vue'
new Vue({
      el: '#app',
      render: h => h(App)
 })

這里的 render: h => h(App) 是什么意思呢召锈?
轉(zhuǎn)換為es5語(yǔ)法后如下:

render: function(h) {
        return h(App);
    }

當(dāng)把h參數(shù)換成 createElement后

render: function(createElement) {
        return createElement(App);
    }

再來(lái)看一個(gè)例子

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <div id="app"></div>
    <script type="text/javascript" src="https://unpkg.com/vue"></script>
    <script type="text/javascript">
        var app = new Vue({
            el: '#app', // 提供一個(gè)在頁(yè)面上已經(jīng)存在的 DOM 元素作為 Vue 實(shí)例掛載目標(biāo)
            render: function (createElement) {
                return createElement('h2', 'Hello Render!');
            }
        });
    </script>
</body>
</html>

是不是回到上面熟悉的場(chǎng)景了。
既創(chuàng)建一個(gè) 內(nèi)容為 ‘Hello Render’ 的 h2 標(biāo)簽获询,替換到id為app的容器上涨岁。


注意不管是 template 還是 render 都是掛載(替換)到 el 所指定的元素,而不是在放在該元素里面吉嚣。



參考文章:
https://juejin.im/post/5a715ec96fb9a01cad7c7958




希望這篇文章能幫助到你梢薪。
END

\color{#ccc}{liwuwuzhi}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市尝哆,隨后出現(xiàn)的幾起案子秉撇,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件琐馆,死亡現(xiàn)場(chǎng)離奇詭異规阀,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)瘦麸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)姥敛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人瞎暑,你說(shuō)我怎么就攤上這事彤敛。” “怎么了了赌?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵墨榄,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我勿她,道長(zhǎng)袄秩,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任逢并,我火速辦了婚禮之剧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘砍聊。我一直安慰自己背稼,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布玻蝌。 她就那樣靜靜地躺著蟹肘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪俯树。 梳的紋絲不亂的頭發(fā)上帘腹,一...
    開(kāi)封第一講書(shū)人閱讀 51,598評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音许饿,去河邊找鬼阳欲。 笑死,一個(gè)胖子當(dāng)著我的面吹牛陋率,可吹牛的內(nèi)容都是我干的球化。 我是一名探鬼主播,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼翘贮,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼赊窥!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起狸页,我...
    開(kāi)封第一講書(shū)人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤锨能,失蹤者是張志新(化名)和其女友劉穎扯再,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體址遇,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡熄阻,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了倔约。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片秃殉。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖浸剩,靈堂內(nèi)的尸體忽然破棺而出钾军,到底是詐尸還是另有隱情,我是刑警寧澤绢要,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布吏恭,位于F島的核電站,受9級(jí)特大地震影響重罪,放射性物質(zhì)發(fā)生泄漏樱哼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一剿配、第九天 我趴在偏房一處隱蔽的房頂上張望搅幅。 院中可真熱鬧,春花似錦呼胚、人聲如沸茄唐。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)琢融。三九已至,卻和暖如春簿寂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背宿亡。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工常遂, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人挽荠。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓克胳,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親圈匆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子漠另,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(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,063評(píng)論 13 171
  • 深入響應(yīng)式 追蹤變化: 把普通js對(duì)象傳給Vue實(shí)例的data選項(xiàng)肤频,Vue將使用Object.defineProp...
    冥冥2017閱讀 4,871評(píng)論 6 16
  • 最近幾天瓦工開(kāi)始貼瓷磚了,他每天都是帶著他的愛(ài)人過(guò)來(lái)做工算墨,他愛(ài)人負(fù)責(zé)給打打下手宵荒,工作效率還算不錯(cuò)的,樓上衛(wèi)生...
    我有很多帥氣的昵稱(chēng)閱讀 370評(píng)論 1 0
  • 蕭瑟兮净嘀,冬至矣报咳! 自入秋來(lái)風(fēng)物稀。 最后一片落下挖藏、心戚戚暑刃! 但見(jiàn)草木羸弱,比我相齊熬苍。 山頭滿(mǎn)時(shí)腹鳴稍走,聊以采薇。 今...
    在山水清閱讀 205評(píng)論 0 0