博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Vue.js--Virtual Dom概述、VNode类型与属性详解
阅读量:2442 次
发布时间:2019-05-10

本文共 2080 字,大约阅读时间需要 6 分钟。

Virtual Dom

Virtual Dom并不是真正意义上的DOM,而是一个轻量级的JavaScript对象,在状态发生变化时,Virtual Dom会进行Diff运算,来更新只需要被替换的DOM,而不是全部重绘。

与DOM操作相比,Virtual Dom是基于JavaScript计算的,所以开销会小很多。

Virtual Dom运行过程:

在这里插入图片描述
示例:
正常的DOM节点在HTML中是这样的:

文本内容

文本内容

用Virtual Dom创建的JavaScript对象一般会是这样的:

var vNode = {
tag: 'div', attributes:{
id: 'main' }, children: {
//p节点 }}

VNode

在Vue.js 2 中,Virtual Dom 就是通过一种VNode类表达的,每个DOM元素或组件都对应一个VNode对象,在Vue.js 源码中是这样定义的:

export interface VNode{
tag?: string; data?: VNodeData; children?: VNode[]; text?: string; elm?: Node; ns?: string; context?: Vue; key?: string | number; componentOptions?: VNodeComponentOptions; componentInstance?: Vue; parent?: VNode; raw?: boolean; isStatic?: boolean; isRootInsert: boolean; isComment: boolean;}

VNodeData代码如下:

export interface VNodeData{
key?: string | number; slot?: string; scopedSlots?: {
[key: string]: ScopedSlot}; ref?: string; tag?: string; staticClass?: string; class?: any; staticStyle?: {
[key: string]: any}; style?: {
[key: string]: any}; props?: {
[key: string]: any}; attrs?: {
[key: string]: any}; domProps?: {
[key: string]: any}; hook?: {
[key: string]: Function}; on?: {
[key: string]: Function | Function[]}; transition?: Object; show?: boolean; inlineTemplate?: {
render: Function; staticRenderFns: Function[]; }; directives?: VNodeDirective[]; keepAlive?: boolean;}

具体含义如下:

  • children: 子节点,数组,也是VNode类型
  • text: 当前节点的文本,一般文本节点或注释节点会有该属性
  • elm: 当前虚拟节点对应的真实的DOM节点
  • ns: 节点的namespace
  • context: 编译作用域
  • functionlContext: 函数化组件的作用域
  • key: 节点的key属性,用于作为节点的标识,有利于patch的优化
  • componentOptions: 创建组件实例时会用到的选项信息
  • child: 当前节点对应的组件实例
  • parent: 组件的占位节点
  • raw: 原始html
  • isStatic: 静态节点的标识
  • isRootInsert: 是否作为根节点插入,被<transition>包裹的节点,概述性的值为false
  • isComment: 当前节点是否是注释节点
  • isCloned: 当前节点是否为克隆节点
  • isOnce: 当前节点是否有v-once指令

VNode类型

  • TextVNode: 文本节点
  • ElementVNode: 普通元素节点
  • ComponentVNode: 组件节点
  • EmptyVNode: 没有内容的注释节点
  • CloneVNode: 克隆节点,可以是以上任意类型的节点,唯一的区别在于isCloned属性为true

转载地址:http://masqb.baihongyu.com/

你可能感兴趣的文章
使用codeigniter_使用CodeIgniter探索面向方面的编程,第2部分
查看>>
用Wufoo创建简单表单:开发人员的观点
查看>>
heroku_使用Heroku和Facebook SDK在云中构建您的应用
查看>>
SitePoint播客#145:Addy Osmani的Backbone.js基础
查看>>
Google发布Chrome 4.0
查看>>
将ip保存在txt文档中_将任何文件存储在Google文档中
查看>>
disconf apps_Google Apps Drop IE6支持
查看>>
使用Screenr创建截屏视频
查看>>
微信小程序使用flex布局_使用Flex来启动您PHP应用程序!
查看>>
互联网总线带宽_新技术将使互联网带宽翻倍
查看>>
java自由职业者是什么_一个成功的自由职业者需要什么?
查看>>
paas云平台架构_PaaS:通过Node.js中的RESTful API管理您的云基础架构
查看>>
HTML完整格式–什么是HTML完整格式?
查看>>
java开发持久层_Java与软件开发保持同步以确保持久流行
查看>>
Angular vs React – Angular和React之间的区别
查看>>
有源蜂鸣器驱动程序_Windows 10现在处于8.25亿有源设备上:这对程序员意味着什么
查看>>
oracle认证考试_通过获得Oracle助理认证来提升您的职业-PrepAway进行的1Z0-052考试复习
查看>>
java语言作为入门好吗_Java作为学生的第一语言
查看>>
sql内联接外联接三张表_在SQL中联接三个或更多表
查看>>
数据科学 python_Python如何帮助数据科学专业人员
查看>>