【Vue】Vue render 函数

深入理解Vue组件之render函数 一般来说,我们写 Vue.js 组件,模板都是写在内的,但它并不是最终呈现的内容,template 只是一种对开发者友好的语法,能够一眼看到 DOM 节点,容易维护,在 Vue.js 编译阶段,会解析为 Virtual DOM。与 DOM 操作相比,Virtual DOM 是基于 JavaScript 计算的,所以开销会小很多。vNode 对象通过一些特定的选项描述了真实的 DOM 结构。 阅读详情

render 函数

1.Vue项目的两种模式

在使用 Vue-cli 脚手架构建 Vue 项目时,会遇到一个选项:Vue Build。其中有两个选择,即Runtime + Compiler和Runtime-only。

这两种模式分别代表:

  1. Runtime + Compiler:运行程序 + 编译器
  2. Runtime-only:仅运行程序,相较于上面的模式要轻大约 6KB,但是 template(或者任何特定于Vue的HTML)只允许在 .vue 文件中使用,在其它地方使用需要依靠render函数。
1.1 两种模式的区别

首先,runtime-only比runtime-compiler轻 6kb,代码量更少

其次,runtime-only运行更快,性能更好

runtime-only其实只能识别render函数,不能识别template,.vue 文件中的template也是被 vue-template-compiler 翻译成了render函数,所以只能在 .vue 里写 template。

1.2 解释

这两种模式生成的项目代码模板的区别主要在 main.js 中,其它文件中基本上是一样的:
在这里插入图片描述
可以看到,在runtime-only模式中,创建 Vue 实例时使用的是render函数。

而在runtime-compiler模式中,则是使用了template属性来创建 html 模板。

再来看下面这张图:
在这里插入图片描述
其中反映的是 Vue 的运行过程。

对于runtime-compiler模式来说,它的代码运行流程是:template → ast → render → virtual dom → UI,即:

  • 首先将 Vue 中的template模板进行解析,将其解析成为 abstract syntax tree 即 ast 抽象语法树。
  • 将抽象语法树再编译为render函数。
  • 将render函数翻译为 virtual dom,即虚拟DOM。
  • 将虚拟DOM展示在页面中。

而对于runtime-only模式来说,它的代码运行流程为:render → virtual dom → UI,即省略了从template到 ast 再到render函数的过程,因此,它相较runtime-compiler模式更快,代码量更少。

但需要注意的是,runtime-only模式中不是没有写template ,只是把template放在了.vue 的文件中了,并有一个叫 vue-template-compiler 的开发依赖时将 .vue 文件中的template解析成render函数。 因为是开发依赖,不在最后生产中,所以最后生产出来的运行的代码没有template。

2.VNode虚拟节点

2.1 VNode 是什么?

VNode 是 JS 对象,准确来说是 JS 中的一个类,可以生产不同类型的vnode实例,不同类型的实例表示不同类型的真实DOM。

VNode 表示Virtual Dom Node,即虚拟DOM节点。是 JS 中用来描述真实DOM的对象,其中将DOM的标签、属性以及内容都变成对象的属性。

简单来说,VNode 可以理解成DOM节点描述对象,他描述了应该怎样去创建真实的DOM节点。

2.2 VNode 的作用

VNode 表示一个真实的DOM元素,所有真实的DOM节点都是用 VNode 创建并插入到页面中。

看下面这张图:
在这里插入图片描述
这里展示了使用 VNode 创建真实的DOM并渲染到视图的过程。可以得知, VNode 和视图是一一对应的。所以,我们可以把 VNode理解成JavaScript对象版本的DOM元素。

渲染视图的过程是先通过render将template模版描述成 VNode,然后在使用 VNode 去生成真实的DOM元素,最后插入到页面渲染视图。

2.3 VNode 的优点
  1. **兼容性强,不受执行环境的影响。**VNode因为是JS对象,不管Node还是浏览器,都可以统一操作,从而获得了服务端渲染、原生渲染、手写渲染函数等能力。
  2. **减少操作DOM。**任何页面的变化,都只使用 VNode 进行操作对比,只需要在最后一步挂载更新DOM,不需要频繁操作DOM,从而提高页面性能。

3.render函数

了解完这两种模式的不同,我们再来探讨一下render函数的作用与具体原理。

3.1 render函数的作用

render函数和template属性一样,都是用来创建 html 模板。且 Vue 推荐在绝大多数情况下使用模板(即template属性)来创建 HTML,但是,在某些业务场景中,如果真的使用template来实现,代码会较为冗长繁琐并且会有大量的重复,这时候就可以使用render渲染函数,因为它相较于模板更接近于编译器。

3.2 render函数的原理分析

render函数即渲染函数,它是一个函数,同时,它的参数createElement也是一个函数。

在常见的项目中render函数的写法如下:

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

这是ES6中的箭头函数的写法,其中将h作为了createElement的别名。所以这段代码实际上相当于:

render: function (createElement) {
    return createElement(App);
}
3.3 createElement函数

该函数的作用是生成一个 VNode 节点,即虚拟节点。而当render函数得到这个虚拟节点后,会将其返回给 Vue.js 的mount函数,并将这个虚拟节点渲染为真实的DOM节点,再将其挂载到根节点上。

createElement函数有以下三个参数:

  • 一个 HTML 标签字符串,或一个组件选项对象,或者解析上述任何一种的一个 async 异步函数。接收类型包括:String | Object | Function,必需!

  • 一个包含模板相关属性的数据对象,你可以在template中使用这些特性。类型:Object,该属性是可选。

  • 子虚拟节点 (VNodes),由 createElement() 构建而成,也可以使用字符串来生成“文本虚拟节点”。类型:String | Array,可选。

vuejs源码之render函数的分析 render函数分析 紧接上文分析到了src\core\instance\lifecycle.js文件下的mountComponent函数,该函数首先就判断了用户是否自己再配置选项中写了render,如果用户没有自己写render,那么vue会进行创建。 用户自己写render示例如下: 在index.html 中 <div id="app"></div> new Vue({ el: '#app', render(createElement){ return cre 阅读详情

相关推荐

Render函数之二《基于vue-cli理解render函数》

1.render 函数作用 render 函数跟template一样都是创建 html 模板的,但是有些场景中用template实现起来代码冗长繁琐而且有大量重复,这时候就可以用render 函数。 2.render 函数讲解 render 函数即渲染函数,它是个函数,它的参数也是个函数——即createElement 2.1render 函数的返回值(VNode) VN...

吴小花的博客 2344

金山实习纪vue篇——render函数的使用

render函数使用 秋招快手、百度、字节面试的不断失利,反而帮助自己积累了更多的大场面试经验,终于在11月初拿到了金山的前端实习offer。作为一名非双一流的普通本科生能进入到这样的大厂实习,属实感到幸运。特此记录实习过程中的经验分享与大家。 1. render函数的作用 render 函数 跟 template 一样都是创建 html 模板的,但是有些场景中用 template 实现起来代码冗长繁琐而且有大量重复,这时候就可以用 render 函数。 官网例子:子组件想要根据父组件传递的 level 值

Mrxcguo的博客 1549

FA 新增资产API Demo

DECLARE l_trans_rec fa_api_types.trans_rec_type; l_dist_trans_rec fa_api_types.trans_rec_type; l_asset_hdr_rec fa_api_types.asset_hdr_rec_type; l_asset_desc_rec fa_a

chosen1brain的专栏 2142

【Vue】render函数使用和详解

前言 在平时编程时,大部分是通过template来创建html。但是在一些特殊的情况下,使用template方式时,就无法很好的满足需求,在这个时候就需要 通过JavaScript 的编程能力来进行操作。此时,就到了render函数展示拳脚去时候了。 render的作用 在官网的这里示例中,使用组件,将相同的内容通过solt放进h1-h6的标签中,在使用传统方式时,代码不仅冗长,而且在每一个级别的标题中重复书写了 ,在要插入锚点元素时还要再次重复。而使用render函数后,代码就精简了很多。 Vue.com

欢迎指错||纠正||建议||水评+点赞&&评论&&关注&&转发 2万+

Hopf振荡器在机器人步态控制里到底怎么用?一个CPG仿生案例说清楚

本文深入解析了Hopf振荡器在机器人步态控制中的实际应用,通过CPG仿生案例详细展示了从数学方程到关节指令的完整流程。重点探讨了Hopf振荡器的极限环稳定性、参数调节技巧及自适应控制策略,为机器人运动控制提供了高效解决方案。

weixin_29284657的博客 200

【OpenAirInterface知识-3】OAI端到端部署之5G基站部署

在上一篇文章中已经完成了5G核心网的部署,本篇文章将介绍OAI 5G基站的部署过程。

起名字难上难的博客 3421

Vue中的render函数

render函数是 Vue 组件的一个方法,用于返回一个虚拟节点(VNode)结构,该结构将被 Vue 转换为真实的 DOM 元素。

承蒙关照! 6383

基于深度学习的番茄成熟度检测系统——YOLOv5、YOLOv8、YOLOv10及UI界面的实现

YOLO是一种快速且准确的目标检测模型,近年来,YOLOv5、YOLOv8和YOLOv10作为YOLO系列的重要版本,分别在速度、精度和效率上进行了优化。下面我们简要介绍这些模型。本文介绍了如何基于YOLOv5、YOLOv8和YOLOv10等深度学习模型,结合PyQt5设计一个番茄成熟度检测系统。通过训练模型、优化算法和设计用户友好的界面,我们能够构建一个高效且准确的番茄成熟度检测系统,广泛应用于农业自动化和智能化管理中。

YOLO 1002

Vue 中的 Render 全面详解 (渲染函数 & JSX)

Vue 推荐在绝大多数情况下使用模板来创建你的 HTML。然而在一些场景中,你真的需要 JavaScript的完全编程的能力。这时你可以用渲染函数,它比模板更接近编译器。简单的说,在 Vue 中我们使用模板 HTML 语法组建页面的,使用 Render 函数我们可以用 Js 语言来构建 DOM。因为 Vue 是虚拟 DOM,所以在拿到 Template 模板时也要转译成 VNode 的函数,而用 Render 函数构建 DOM,Vue 就免去了转译的过程。

小太阳的博客 2万+

【行为决策模块项目实战】解耦控制--多控制器管理与切换的方法(附C++代码)

[请添加图片描述](https://img-blog.csdnimg.cn/c11300d9e4fe421e9070f474a468d1db.jpeg)本文先对多控制器管理与切换的方法做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容VERTICAL_VEL, //垂直速度PID控制器VERTICAL_POS, //垂直位置PID控制器HORIZONTAL, //水平速度PID控制器YAW, //航向角yaw位置逻辑控制器。

qq_35635374的博客 1211

STM32F4 SPI FLASH(W25Q128)驱动详解(含DMA+完整读写擦除+低功耗)

本文实现了一款基于STM32 HAL库的SPI Flash驱动,以W25Q128为例,提供了完整的初始化、读写、擦除、ID读取等功能。驱动集成了DMA传输、超时保护、页对齐写入等特性,支持扇区擦除、整片擦除、页写入及跨页缓冲写入。代码结构清晰,易于移植到其他SPI Flash型号(如W25Q64、W25Q16等),适用于数据存储、固件升级、文件系统等嵌入式场景。

kevin1499的博客 96

详解在vue项目中使用render函数

不停留在Vue.component('heading', {render: function (h) {return h()},走进工程,实战render函数。

圆圆的 JavaScript 博客 3万+

PLC框架-1.3- 汇川PN伺服(3号报文)

本文以汇川IS620F伺服为例,详细介绍了FB_Servo_ToAxis功能块的应用方法。该功能块封装了MC_Home等轴控指令,实现使能、定位、点动、速度模式及回零等功能,支持转矩限制与显示,并具备行程统计和HMI单位自动切换特性。文章从硬件配置(PN网络连接、报文选择)、参数设置(控制模式、电子齿轮比),到软件实现(功能块调用、手动/自动控制逻辑)进行了系统说明,重点展示了绝对/相对定位、速度模式等典型应用场景的程序编写方法,为汇川伺服在Profinet网络下的工程应用提供了完整解决方案。

qq_34047402的博客 756

【Vuejs】render函数的使用

Vue 推荐在绝大多数情况下使用 template 来创建你的 HTML。然而在一些场景中,你真的需要 JavaScript 的完全编程的能力,这就是 render 函数,它比 template 更接近编译器。 render 基本写法 export default { name: 'renderTest', data() {}, render: (createElement) => { ...

小太阳 3773

SAP 经营范围(Operating Concern) 和业务范围 (Business Area) 在核算架构或是管理架构中的区别和联系分别是什么 请给具体的示例

摘要:SAP系统中,业务范围(Business Area)和经营范围(Operating Concern)在核算架构中具有不同功能。业务范围是FI/CO共用维度,用于跨公司码的业务线核算(如电子产品、机械设备),支持内部管理和简单对外报表。经营范围则是CO-PA专属维度,聚焦获利能力分析,可细化到产品+客户+区域组合(如分析手机在华东区域的获利情况)。两者存在层级关联:经营范围包含业务范围作为基础维度,业务范围数据会传递至经营范围进行深度分析。实际应用中需先配置业务范围,再设置经营范围并关联相关维度,共同支

金牌架构师 95

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

vue中render函数解析

render解析 在vue文件中其实是通过读取template再渲染到render函数中,在vue的main.js中初始状态是这样的: new Vue({ render:h=>(App) }).$mount('#app') 以上代码可以解析成 new Vue({ render:React.createElement=>{ return...

monthover的博客 865

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

vue中的render函数

render 函数 跟 template 一样都是创建 html 模板的,但是有些场景中用 template 实现起来代码冗长繁琐而且有大量重复,这时候就可以用 render 函数。

webchang的博客 2万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

vuejs的render渲染函数

官网文档地址:https://cn.vuejs.org/v2/guide/render-function.html 引入:         vue推荐绝大数情况下实验template创建 html,但是我们时常在vue开发需要动态的生成页面,这就是rendered函数,它比template更接近编译器          前面的博客有介绍过slot,它具备将语句中html显示对应slot的位置

z1340954953 1万+

vue的render函数用法

1.render简介 前面我们的组件的模板都是在模板里写的(template),模板最后都会被vue编译成virtual dom(虚拟dom),在某些情况下模板可能不好用,例如需要实现一个动态的文章标题,根据父组件的level属性,动态的渲染成h1~hx标签,用模板写部分代码如下。 <article-header :level="1">Hello world</article-h...

lucky_ly的博客 3735

vue中的render函数介绍

简介:对于不了解slot的用法(参考:大白话vue-slot的用法)又刚接触render函数的同学来说,官网的解释无疑一脸懵逼,这里就整理下个人对render函数的理解 问题:   1、render函数是什么   2、render函数怎么用 render函数是什么   简单的说,在vue中我们使用模板HTML语法组建页面的,使用render函数我们可以用js语言来构建DOM   因为v...

Cool的博客 1万+

vue的渲染函数 - render

简单的说,在vue中我们使用模板HTML语法来组建页面的,使用render函数我们可以用js语言来构建DOM。因为vue是虚拟DOM,所以在拿到template模板时也要转译成VNode的函数,而用render函数构建DOM,vue就免去了转译的过程。  ............

nunumaymax的博客 4573

Vue——render函数

render函数的知识点比较多,作为单独的一篇; 首先,render函数返回VNode,即虚拟DOM节点;render函数接受两个参数,一个是createElement函数,该函数负责创建VNode,一个是context,该参数在函数组件中可用,用来传递函数组件的上下文作环境;第二是createElement函数接收的参数;第三是函数组件中的render函数; ...

RainGirl_的博客 1598

vue中的render函数(通俗、易懂)

关于vuecli创建项目常见的render函数解析。

m0_59722204的博客 1万+

Vue 3 | Render 函数小变动

开门见山Render function API?是不是感觉有点陌生?那恭喜你,这个改动不会对你这位 <template> 用户造成影响。老规矩,上帝视角看一下:h 需要从全局...

weixin_39841838的博客 1万+

Vue之render函数

render函数从名字上看就可以看出,它是一个用于渲染的函数,在Vue中我们要将我们写的界面展示到屏幕上时,使用的方式都是组件中的template:标签下编写内容后,由Vue将我们编写的界面渲染到屏幕上。而这个render函数就是比template更底层的函数,我们可以利用它直接渲染我们想渲染的内容。这样做的好处是性能更高,并且使用更加灵活。

知识应该共享,创造才应收费 2086
上一篇: 【JS进阶】JS的事件循环机制
下一篇: 【JS进阶】JS内存泄漏
cannotbecounted
博客等级 码龄7年 101粉丝 59原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值