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 相关文章推荐
IE6与IE7中,innerHTML获取param的区别
Mar 15 Javascript
jQuery动态添加的元素绑定事件处理函数代码
Aug 02 Javascript
JS getAttribute和setAttribute(取得和设置属性)的使用介绍
Jul 10 Javascript
使用js实现按钮控制文本框加1减1应用于小时+分钟
Dec 09 Javascript
js点击按钮实现带遮罩层的弹出视频效果
Dec 19 Javascript
JavaScript入门系列之知识点总结
Mar 24 Javascript
微信小程序 tabs选项卡效果的实现
Jan 05 Javascript
javascript使用btoa和atob来进行Base64转码和解码
Mar 20 Javascript
Vue2.0实现将页面中表格数据导出excel的实例
Aug 09 Javascript
微信小程序-form表单提交代码实例
Apr 29 Javascript
使用layui实现的左侧菜单栏以及动态操作tab项方法
Sep 10 Javascript
JavaScript计算正方形面积
Nov 26 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 面向对象 final类与final方法
2010/05/05 PHP
php中instanceof 与 is_a()区别分析
2015/03/03 PHP
提高php编程效率技巧
2015/08/13 PHP
Zend Framework处理Json数据方法详解
2016/12/09 PHP
php使用include 和require引入文件的区别
2017/02/16 PHP
JavaScript 申明函数的三种方法 每个函数就是一个对象(一)
2009/12/04 Javascript
理解JAVASCRIPT中hasOwnProperty()的作用
2013/06/05 Javascript
Firefox中通过JavaScript复制数据到剪贴板(Copy to Clipboard 跨浏览器版)
2013/11/22 Javascript
js/jquery判断浏览器类型的方法小结
2015/05/12 Javascript
JS面向对象编程详解
2016/03/06 Javascript
jquery插件uploadify多图上传功能实现代码
2016/08/12 Javascript
JS表格组件BootstrapTable行内编辑解决方案x-editable
2016/09/01 Javascript
Vue实现双向绑定的原理以及响应式数据的方法
2018/07/02 Javascript
vue从一个页面跳转到另一个页面并携带参数的解决方法
2019/08/12 Javascript
解决layui弹框失效的问题
2019/09/09 Javascript
使用vue重构资讯页面的实例代码解析
2019/11/26 Javascript
Vue前端项目部署IIS的实现
2020/01/06 Javascript
vue项目创建步骤及路由router
2020/01/14 Javascript
小程序实现列表倒计时功能
2021/01/29 Javascript
详解python基础之while循环及if判断
2017/08/24 Python
快速解决PyCharm无法引用matplotlib的问题
2018/05/24 Python
Python图像处理之颜色的定义与使用分析
2019/01/03 Python
JupyterNotebook设置Python环境的方法步骤
2019/12/03 Python
使用Python脚本从文件读取数据代码实例
2020/01/19 Python
Python3 xml.etree.ElementTree支持的XPath语法详解
2020/03/06 Python
PYQT5 vscode联合操作qtdesigner的方法
2020/03/24 Python
美国知名的女性服饰品牌:LOFT(洛芙特)
2016/08/05 全球购物
亿企通软件测试面试题
2012/04/10 面试题
业务经理岗位职责
2013/11/11 职场文书
志愿者活动总结范文
2014/04/26 职场文书
新文化运动的口号
2014/06/21 职场文书
机修车间主任岗位职责
2015/04/08 职场文书
2015年评职称工作总结范文
2015/04/20 职场文书
大学学生会辞职信
2015/05/13 职场文书
民事代理词范文
2015/05/25 职场文书
Python jiaba库的使用详解
2021/11/23 Python