Vue2.x中的Render函数详解


Posted in Javascript onMay 30, 2017

Render函数是Vue2.x版本新增的一个函数;使用虚拟dom来渲染节点提升性能,因为它是基于JavaScript计算。通过使用createElement(h)来创建dom节点。createElement是render的核心方法。其Vue编译的时候会把template里面的节点解析成虚拟dom;

什么是虚拟dom?

虚拟dom不同于真正的dom,它是一个JavaScript对象。当状态发生变化的时候虚拟dom会进行一个diff判断/运算;然后判断哪些dom是需要被替换的而不是全部重绘,所以性能会比dom操作高很多。

下面看一张Aresn大神总结的一张图:

Vue2.x中的Render函数详解

Vue2.x版本中VNode属性:

tag:当前节点标签名,

data:当前节点数据对象,

children:子节点数组,

text:当前节点文本,

elm:当前虚拟节点对应的真实dom节点,

ns:节点的namespace( 名称空间),

content:编译作用域,

functionalContext:函数化组件的作用域,即全局上下文,

key:节点标识,有利于patch优化,

componentOptions:创建组件实例时的options,

child:当前节点对应的组件实例,

parent:组件的占位节点,

raw:原始html,

isStatic:是否是静态节点,

isRootInsert:是否作为跟节点插入,若被<transition>包裹的节点,该属性值为false,

isComment:是否为注释节点,

isCloned:是否为克隆节点,

isOnce:是否只改变(渲染)一次,或是否有v-once指令;

其中这里面又有几种VNode类型:

Aresn大神总结的很好:

Vue2.x中的Render函数详解

TextVNode:文本节点,

ElementVNode:普通元素节点,

ComponentVNode:组件节点,

EmptyVNode:空节点,或者说是没有内容的注释节点,

CloneVNode:克隆节点,可以是以上任意类型节点

说了那么多;到底什么时候用虚拟dom才比较好呢?其实 我们使用的单文件组件就已经够好了。但是当某些代码冗余的时候如果写单文件组件的话会有好多重复的内容;

接下来介绍其核心函数;

createElement:

createElement接收3个参数:

第一个参数可以是HTML标签名,组件或者函数都可以;此参数是必须的;

第二个为数据对象(可选);

第三个为子节点(可选)。

附上一个非常简单的createElement函数demo;

var app = new Vue({
   el:"#app",
   render:createElement => {
     eturn createElement(
       'h2',
       [
         createElement(
           'a',
           {
             domProps:{
               href:"#biaoti"
             }
           },
           "标题"
         )
        ]      
       );
 
     }
 });

这只是一个createElement函数的使用,而Vue2中VNodeData

class: v-bind/:class

style:v-bind/:style

attrs:dom属性,如id

props:props,

on:自定义事件等,

 nativeOn:原生事件

像这些也可以在render函数中实现,若VNode是组件或含有组件的slot,那么VNode必须是唯一。

像平常开发过程中单文件组件中template写法更为简单,可读性也高。如果是webpack进行打包的话template也会预编译成render函数。

这里demo栗子暂时还没写那么多。这里只是一个简单的介绍。若有更好的欢迎大家一起学习讨论。

Javascript 相关文章推荐
腾讯UED 漂亮的提示信息效果代码
Sep 12 Javascript
js给dropdownlist添加选项的小例子
Mar 04 Javascript
jquery批量设置属性readonly和disabled的方法
Jan 24 Javascript
使用jquery prev()方法找到同级的前一个元素
Jul 11 Javascript
js实现checkbox全选、不选与反选的方法
Feb 09 Javascript
JavaScript实现俄罗斯方块游戏过程分析及源码分享
Mar 23 Javascript
JavaScript资源预加载组件和滑屏组件的使用推荐
Mar 10 Javascript
js中获取键盘事件的简单实现方法
Oct 10 Javascript
AngularJS中$injector、$rootScope和$scope的概念和关联关系深入分析
Jan 19 Javascript
原生js实现类似fullpage的单页/全屏滚动
Jan 22 Javascript
JavaScript指定断点操作实例教程
Sep 18 Javascript
详解vue微信网页授权最终解决方案
Jun 16 Javascript
jQuery实现动态删除LI的方法
May 30 #jQuery
Vue.js实现在下拉列表区域外点击即可关闭下拉列表的功能(自定义下拉列表)
May 30 #Javascript
JS给按钮添加跳转功能类似a标签
May 30 #Javascript
jQuery异步提交表单实例
May 30 #jQuery
JS实现多级菜单中当前菜单不随页面跳转样式而发生变化
May 30 #Javascript
Angularjs中使用轮播图指令swiper
May 30 #Javascript
AngularJS路由Ui-router模块用法示例
May 29 #Javascript
You might like
PHP simple_html_dom.php+正则 采集文章代码
2009/12/24 PHP
php curl 登录163邮箱并抓取邮箱好友列表的代码(经测试)
2011/04/07 PHP
PHP性能优化工具篇Benchmark类调试执行时间
2011/12/06 PHP
如何用C语言编写PHP扩展的详解
2013/06/13 PHP
laravel请求参数校验方法
2019/10/10 PHP
让焦点自动跳转
2006/07/01 Javascript
js下拉菜单语言选项简单实现
2013/09/23 Javascript
jquery ajax 调用失败的原因示例介绍
2013/09/27 Javascript
JavaScript中的正则表达式简明总结
2014/04/04 Javascript
jQuery中:contains选择器用法实例
2014/12/30 Javascript
jQuery解析XML文件同时动态增加js文件的方法
2015/06/01 Javascript
Boostrap入门准备之border box
2016/05/09 Javascript
javascript中获取元素标签中间的内容的实现方法
2016/10/08 Javascript
JQuery和html+css实现带小圆点和左右按钮的轮播图实例
2017/07/22 jQuery
mongoose设置unique不生效问题的解决及如何移除unique的限制
2017/11/07 Javascript
vue.js项目打包上线的图文教程
2017/11/16 Javascript
React.js绑定this的5种方法(小结)
2018/06/05 Javascript
使用RN Animated做一个“添加购物车”动画的方法
2018/09/12 Javascript
微信小程序地图(map)组件点击(tap)获取经纬度的方法
2019/01/10 Javascript
详解javascript void(0)
2020/07/13 Javascript
Element PageHeader页头的使用方法
2020/07/26 Javascript
jQuery实现雪花飘落效果
2020/08/02 jQuery
[14:00]DOTA2国际邀请赛史上最长大战 赛后专访B神
2013/08/10 DOTA
Python常用的日期时间处理方法示例
2015/02/08 Python
在Python 不同级目录之间模块的调用方法
2019/01/19 Python
python简单区块链模拟详解
2019/07/03 Python
Python列表解析操作实例总结
2020/02/26 Python
python GUI库图形界面开发之PyQt5 UI主线程与耗时线程分离详细方法实例
2020/02/26 Python
JetBrains PyCharm(Community版本)的下载、安装和初步使用图文教程详解
2020/03/19 Python
TensorFlow2.X使用图片制作简单的数据集训练模型
2020/04/08 Python
国际领先的在线时尚服装和配饰店:DressLily
2019/03/03 全球购物
Hobbs官方网站:英国奢华女性时尚服装
2020/02/22 全球购物
《花木兰》教学反思
2014/04/09 职场文书
入党综合考察材料
2014/06/02 职场文书
作风整顿个人剖析材料
2014/10/06 职场文书
导游词之南迦巴瓦峰
2019/11/19 职场文书