iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >Vue中为什么要引入render函数的实现
  • 309
分享到

Vue中为什么要引入render函数的实现

2024-04-02 19:04:59 309人浏览 泡泡鱼
摘要

目录前言背景原理后记前言 使用Vue脚手架创建项目的入口文件main.js中,默认代码如下: import Vue from 'vue' import App from './App

前言

使用Vue脚手架创建项目的入口文件main.js中,默认代码如下:

import Vue from 'vue'
import App from './App.vue'

Vue.config.productionTip = false

new Vue({
  render: h => h(App),
}).$mount('#app')

可以看到,代码中通过import引入了App组件,但是却并没有通过components注册,还使用了一个render函数,而没有利用template属性

//上述代码的等价写法
import Vue from 'vue/dist/vue'//注意此处差异
import App from './App.vue'

Vue.config.productionTip = false

new Vue({
    template: `<App/>`,
    components: { App },
}).$mount('#app')

想要知道上述代码为什么等价,就需要从Vue的不同版本说起

背景

Vue有两大部分组成,一个是核心功能,包括生命周期、事件处理等内容,另一部分是模板解析器,用来对Vue模板进行解析。

vue.js中包括了这两部分的全部内容(即完整版的vue),但是这样会有一个问题,当项目开发完毕进行打包时,打包后的文件会引入完整版vue的全部代码,但是实际上打包后的输出文件中已经不需要Vue模板解析器部分的代码了(模板已经被解析好了,浏览器可以直接运行),引入完整版Vue只会增大打包后文件的体积。

为了解决这个问题,Vue团队提供了不同版本的Vue,vue.js为完整版的Vue,其他版本都是在vue.js完整版上进行的精简,比如vue.runtime.*为Vue的运行版,不包括Vue模板解析器部分代码。

既然Vue有不同的版本,那么我们在import引入Vue的时候,到底用的是哪个版本呢?

查看Vue包中的package.JSON文件可以发现,es6模块化的入口文件是vue.runtime.esm.js,即Vue默认帮我们引入的是vue的运行版,其中不包括模板解析器部分代码。

运行版Vue想要进行模板解析,就需要使用render函数。Vue官方案例中,入口文件main.js的内容如下,其中使用了render函数进行模板解析。

import Vue from 'vue'
import App from './App.vue'

Vue.config.productionTip = false

new Vue({
  render: h => h(App),
}).$mount('#app')

如果我们使用template属性进行模板解析,会报错You are using the runtime-only build of Vue where the template compiler is not available. Either pre-compile the templates into render functions, or use the compiler-included build.

//通过 import Vue from 'vue/dist/vue'引入完整版的vue,则代码不会报错

import Vue from 'vue'//默认引入运行版的vue,使用template编写模板会报错

Vue.config.productionTip = false

new Vue({
    template: `<h1>hello</h1>`,
}).$mount('#app')

注意:上边说的模板解析指的是解析vm配置对象的template属性中定义的模板

组件中的模板(.vue中template标签中的内容),vue使用了vue-template-compiler帮助我们解析,而且可以看到他只在开发依赖中,在生产依赖中是没有的,这也很好解释,因为打包后的文件浏览器已经可以直接运行了,不存在vue模板语法,也就不需要vue-template-compiler了。

"dependencies": {
    "core-js": "^3.6.5",
    "vue": "^2.6.11"
},
"devDependencies": {
    "@vue/cli-plugin-babel": "~4.5.0",
    "@vue/cli-plugin-eslint": "~4.5.0",
    "@vue/cli-service": "~4.5.0",
    "babel-eslint": "^10.1.0",
    "eslint": "^6.7.2",
    "eslint-plugin-vue": "^6.2.2",
    "vue-template-compiler": "^2.6.11"
},

原理

在vm的配置对象中使用template属性,可以通过html语法,创建vue模板页面,我们编写的Vue模板在底层先会被转换成虚拟Dom,才会渲染到页面中(真实Dom)。

在vm的配置对象中使用 render函数 ,可以直接用js构建虚拟DOM,免去了转译(Vue模板转译成虚拟Dom)的过程。

后记

到此这篇关于Vue中为什么要引入render函数的实现的文章就介绍到这了,更多相关Vue引入render函数内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Vue中为什么要引入render函数的实现

本文链接: https://www.lsjlt.com/news/162007.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Vue中为什么要引入render函数的实现
    目录前言背景原理后记前言 使用Vue脚手架创建项目的入口文件main.js中,默认代码如下: import Vue from 'vue' import App from './App...
    99+
    2024-04-02
  • Vue中如何引入render函数
    这篇文章主要讲解了“Vue中如何引入render函数”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue中如何引入render函数”吧!前言使用Vue脚手架创建项目的入口文件main.js中...
    99+
    2023-06-26
  • vue中Render函数有什么用
    vue中Render函数有什么用,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。首先是v-if 的转化使用全局组件的v 值决定组件渲染的状态...
    99+
    2024-04-02
  • 为什么要引入数据库中间件
    为什么要引入数据库中间件,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。不少朋友经常会问我以下问题:58到家有没有使用数据库中间件使用了什么...
    99+
    2024-04-02
  • vue 为什么要封装全局组件引入
    目录1.为什么要封装全局组件引入2. 封装全局组件的 js3. 在 main.js 中4. 我们要引入这些公共组件就可以直接用啦1.为什么要封装全局组件引入 为何要封装一个封装全局组...
    99+
    2024-04-02
  • python函数为什么要加入self
    python函数中需要加self的理由python的类的方法和普通的函数有一个很明显的区别,在类的方法必须有个额外的第一个参数 (self ),但在调用这个方法的时候不必为这个参数赋值 ,且Python类的方法指代的是对象本身,它需要用se...
    99+
    2024-04-02
  • 为什么要在 Spring 中使用 Go 索引函数?
    Spring 是一个流行的 Java 开发框架,它提供了丰富的功能和组件,可以帮助开发人员快速开发高质量的应用程序。在 Spring 中,有一个非常实用的功能是 Go 索引函数,本文将深入探讨为什么要在 Spring 中使用 Go 索引函数...
    99+
    2023-10-11
    索引 spring 函数
  • vue中的data为什么是函数
    小编给大家分享一下vue中的data为什么是函数,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!vue 中的data 为什么是函数...
    99+
    2024-04-02
  • 聊聊为什么Vue 3要使用setup()函数
    在Vue 2中,我们通常会使用选项式API来创建组件,即通过声明生命周期函数、数据、事件等来实现组件的功能。但是,Vue 3提供了一种新的API方式,称为函数式API,其中最关键的部分是setup()函数。setup()函数是Vue 3中的...
    99+
    2023-05-14
  • 在vue中动态的引入图片为什么要使用require?解析分享
    其实上面的总结已经很清晰了。站在一个vue项目的角度,我们可以简单的理解为:静态资源就是直接存放在项目中的资源,这些资源不需要我们发送专门的请求进行获取。比如assets目录下面的图片,视频,音频,字体文件,css样式表等。动态资源就是需要...
    99+
    2022-11-22
    前端 Vue.js
  • Vue中动态引入图片要require的原因是什么
    这篇“Vue中动态引入图片要require的原因是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Vue中动态引入图片要r...
    99+
    2023-07-04
  • vue中定义的data为什么是函数
    目录一、new Vue场景二、组件场景总结高频面试题:vue中的data为啥是函数? 答案是:是不是一定是函数,得看场景。并且,也无需担心什么时候该将data写为函数还是对象,因为v...
    99+
    2024-04-02
  • vue中data为什么必须是函数
    这是因为JavaScript的特性所导致,跟vue本身设计无关,js本身的面向对象编程也是基于原型链和构造函数,而在原型链上添加一般都是一个函数方法并不是添加一个对象,因此在component中,data必须以函数的形式存在,不可以是对象。...
    99+
    2024-04-02
  • vue组件中data为什么是函数
    这篇文章主要介绍“vue组件中data为什么是函数”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“vue组件中data为什么是函数”文章能帮助大家解决问题。原因:防止多个组件实例对象之间共用一个dat...
    99+
    2023-07-04
  • Go函数的存储和索引:为什么它们如此重要?
    Go语言是一种快速、简单、高效的编程语言,它被广泛应用于Web开发、系统编程等领域。在Go语言中,函数是一种非常重要的概念,它们在程序中扮演着非常重要的角色。在本文中,我们将讨论Go函数的存储和索引,以及它们为什么如此重要。 一、函数的存储...
    99+
    2023-07-05
    函数 存储 索引
  • PostgreSQL中函数reconsider_outer_join_clauses的主要实现逻辑是什么
    本篇内容介绍了“PostgreSQL中函数reconsider_outer_join_clauses的主要实现逻辑是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家...
    99+
    2024-04-02
  • vue项目中怎么实现全局引入jquery
    这篇文章主要介绍“vue项目中怎么实现全局引入jquery”,在日常操作中,相信很多人在vue项目中怎么实现全局引入jquery问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue项目中怎么实现全局引入jqu...
    99+
    2023-07-02
  • Vue-cli3中怎么引入ECharts并实现自适应
    本篇内容介绍了“Vue-cli3中怎么引入ECharts并实现自适应”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!效果1. 安装echart...
    99+
    2023-07-02
  • vue组件中data为什么是一个函数
    这篇文章给大家分享的是有关vue组件中data为什么是一个函数的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。组件中 data 为什么是一个函数?为什么组件中的 data 必须是一...
    99+
    2024-04-02
  • vue动态引入图片要使用require的原因是什么
    这篇文章主要讲解了“vue动态引入图片要使用require的原因是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue动态引入图片要使用require的原因是什么”吧!1.什么是静态资源...
    99+
    2023-07-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作