欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue中?render?函數(shù)功能與原理分析

 更新時間:2023年06月07日 10:20:31   作者:webchang  
這篇文章主要介紹了vue中?render?函數(shù)功能與原理,結(jié)合實例形式分析了vue中render函數(shù)的基本功能、原理及相關(guān)操作注意事項,需要的朋友可以參考下

1. 前言

在使用 vue-cli2 腳手架構(gòu)建項目時,如果選擇了Runtime-only模式,那么在main.js文件中會有下面一段代碼:

有關(guān)Runtime + Compiler的介紹可以看這篇文章:Vue中 Runtime + Compiler 和 Runtime-only 兩種模式含義和區(qū)別

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

2. 分析render函數(shù)

2.1 render 函數(shù)的作用

Vue 推薦在絕大多數(shù)情況下使用模板來創(chuàng)建你的 HTML。然而在一些場景中,真的需要 JavaScript 的完全編程的能力。這時可以用渲染函數(shù),它比模板更接近編譯器。

render 函數(shù)和 template 一樣都是創(chuàng)建 html 模板的,但是有些場景中用 template 實現(xiàn)起來代碼冗長繁瑣而且有大量重復(fù),這時候就可以用 render 函數(shù)。

2.2 render 函數(shù)講解

render 函數(shù)即渲染函數(shù),它是個函數(shù),它的參數(shù) createElement 也是個函數(shù)。

上邊的代碼中 render: h => h(App) ,這是 ES6的箭頭函數(shù)的寫法,可以把 h 當(dāng)作 createElement 的別名。所以這段代碼其實相當(dāng)于:

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

2.3 createElement 函數(shù)講解

這個函數(shù)的作用就是生成一個 VNode節(jié)點,render 函數(shù)得到這個 VNode 節(jié)點之后,返回給 Vue.js 的 mount 函數(shù),渲染成真實 DOM 節(jié)點,并掛載到根節(jié)點上。

createElement 函數(shù)的返回值是 VNode(即:虛擬節(jié)點)
有關(guān)對 VNode 的介紹可以看這篇博客:VNode簡介

createElement 函數(shù)的3個參數(shù)

  • 一個 HTML 標(biāo)簽字符串,組件選項對象,或者解析上述任何一種的一個 async 異步函數(shù)。類型:String | Object | Function。必需。
  • 一個包含模板相關(guān)屬性的數(shù)據(jù)對象,你可以在 template 中使用這些特性。類型:Object??蛇x。
  • 子虛擬節(jié)點 (VNodes),由 createElement() 構(gòu)建而成,也可以使用字符串來生成“文本虛擬節(jié)點”。類型:String | Array??蛇x。

實現(xiàn)createElement函數(shù)

1、普通用法

// main.js文件
new Vue({
  el: '#app',
  render:function (createElement) {
    //1.普通用法
    // createElement(標(biāo)簽,{屬性},[內(nèi)容])
    return createElement("h2",{class:"box"},['hello',createElement("button",["按鈕"])])
  }
})

運行效果如圖所示:
在這里插入圖片描述
2、我們也可以自定義一個組件,傳遞給render函數(shù)

// ...
let Cpn = {
  template:`<h2>{{message}}</h2>`,
  data(){
    return {
      message:"我是組件"
    }
  }
}
new Vue({
  el: '#app',
  render:function (createElement) {
    //2.使用組件
    return createElement(Cpn)
  }
})

運行效果如圖所示:
在這里插入圖片描述
3、既然我們能夠使用組件,那么App組件也是可以的

import Vue from 'vue'
import App from './App'
Vue.config.productionTip = false
new Vue({
  el: '#app',
  render:function (createElement) {
    return createElement(App)
  }
})

效果如圖所示:
在這里插入圖片描述

3. 參考資料

render渲染函數(shù) — Vue.js官網(wǎng)

補充

關(guān)于Vue中 render: h => h(App) 的具體含義的理解

?一、問題:

https://github.com/vuejs-templates/webpack-simple/blob/master/template/src/main.js

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

vue的代碼中有這么一段,令人第一眼對這個 h 函數(shù)十分困惑??

二、原因:

經(jīng)過查找相關(guān)資料后發(fā)現(xiàn):

render: h => h(App) 是下面內(nèi)容的縮寫:

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

進(jìn)一步縮寫為(ES6 語法):

render (createElement) {
? ? return createElement(App);
}

再進(jìn)一步縮寫為:

render (h){
? ? return h(App);
}

按照 ES6 箭頭函數(shù)的寫法,就得到了:

render:?h?=>?h(App);

其中 根據(jù) Vue.js 作者 Even You 在 Vue 的 issue 中的回復(fù),h 的含義如下:

It comes from the term "hyperscript", which is commonly used in many virtual-dom implementations. "Hyperscript" itself stands for "script that generates HTML structures" because HTML is the acronym for "hyper-text markup language".

它來自單詞 hyperscript,這個單詞通常用在 virtual-dom 的實現(xiàn)中。Hyperscript 本身是指 
生成HTML 結(jié)構(gòu)的 script 腳本,因為 HTML 是 hyper-text markup language 的縮寫(超文本標(biāo)記語言)

三、總結(jié):

h 函數(shù)的本質(zhì)是createElement 函數(shù),這個函數(shù)的作用就是生成一個 VNode節(jié)點,render 函數(shù)得到這個 VNode 節(jié)點之后,返回給 Vue.js 的 mount 函數(shù),渲染成真實 DOM 節(jié)點,并掛載到根節(jié)點上

而之所以要 叫 h,根據(jù)作者解釋是,來源于 hyper script,

........

個人覺得可讀性差了很多,就算是外國人不經(jīng)解釋也很難理解這個 h 函數(shù)

不如直接 createElement 

相關(guān)文章

  • Vue中foreach數(shù)組與js中遍歷數(shù)組的寫法說明

    Vue中foreach數(shù)組與js中遍歷數(shù)組的寫法說明

    這篇文章主要介紹了Vue中foreach數(shù)組與js中遍歷數(shù)組的寫法說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • vue better-scroll插件使用詳解

    vue better-scroll插件使用詳解

    本篇文章主要介紹了vue better-scroll插件使用詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • vue在.js文件中如何進(jìn)行路由跳轉(zhuǎn)

    vue在.js文件中如何進(jìn)行路由跳轉(zhuǎn)

    這篇文章主要介紹了vue在.js文件中如何進(jìn)行路由跳轉(zhuǎn),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • vue?extend+promise封裝全局彈窗組件

    vue?extend+promise封裝全局彈窗組件

    這篇文章主要為大家詳細(xì)介紹了vue?extend+promise封裝全局彈窗組件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Vue2?與?Vue3?的數(shù)據(jù)綁定原理及實現(xiàn)

    Vue2?與?Vue3?的數(shù)據(jù)綁定原理及實現(xiàn)

    這篇文章主要介紹了Vue2與Vue3的數(shù)據(jù)綁定原理及實現(xiàn),數(shù)據(jù)綁定是一種把用戶界面元素的屬性綁定到特定對象上面并使其同步的機制,使開發(fā)人員免于編寫同步視圖模型和視圖的邏輯
    2022-09-09
  • 基于VUE.JS的移動端框架Mint UI的使用

    基于VUE.JS的移動端框架Mint UI的使用

    本篇文章主要介紹了基于VUE.JS的移動端框架Mint UI的使用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • 深入探究Vue中$nextTick的實現(xiàn)原理

    深入探究Vue中$nextTick的實現(xiàn)原理

    這篇文章主要為大家詳細(xì)介紹Vue中$nextTick的實現(xiàn)原理,文中的示例代碼講解詳細(xì),對我們深入了解Vue有一定的幫助,需要的小伙伴可以參考一下
    2023-06-06
  • Vue中fragment.js使用方法小結(jié)

    Vue中fragment.js使用方法小結(jié)

    這篇文章主要給大家匯總介紹了Vue中fragment.js使用方法的相關(guān)資料,需要的朋友可以參考下
    2020-02-02
  • vue項目部署到nginx/tomcat服務(wù)器的實現(xiàn)

    vue項目部署到nginx/tomcat服務(wù)器的實現(xiàn)

    這篇文章主要介紹了vue項目部署到nginx/tomcat服務(wù)器的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • vue過濾器實現(xiàn)日期格式化的案例分析

    vue過濾器實現(xiàn)日期格式化的案例分析

    這篇文章主要介紹了vue過濾器實現(xiàn)日期格式化的案例分析,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07

最新評論