VNode简介

VNode简介VNode 说明 amp 作用 VNode 是什么 VNode 是 JavaScript 对象 VNode 表示 VirtualDOM 用 JavaScript 对象来描述真实的 DOM 把 DOM 标签 属性 内容都变成对象的属性 就像使用 JavaScript 对象对一种动物进行说明一样 name HelloKitty age 1 children null VNode 的作用通过 render 将 tem

VNode说明&作用

VNode是什么

VNode是JavaScript对象。VNode表示Virtual DOM,用JavaScript对象来描述真实的DOMDOM标签,属性,内容都变成对象的属性。就像使用JavaScript对象对一种动物进行说明一样{name: 'Hello Kitty', age: 1, children: null}

VNode的作用

通过rendertemplate模版描述成VNode,然后进行一系列操作之后形成真实的DOM进行挂载。

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

VNode如何生成

Vue源码中,VNode是通过一个构造函数生成的。

export default class VNode { 
    constructor ( tag?: string, data?: VNodeData, children?: ?Array<VNode>, text?: string, elm?: Node, context?: Component, componentOptions?: VNodeComponentOptions, asyncFactory?: Function ) { 
    this.tag = tag this.data = data this.children = children this.text = text this.elm = elm this.ns = undefined this.context = context this.fnContext = undefined this.fnOptions = undefined this.fnScopeId = undefined this.key = data && data.key this.componentOptions = componentOptions this.componentInstance = undefined this.parent = undefined this.raw = false this.isStatic = false this.isRootInsert = true this.isComment = false this.isCloned = false this.isOnce = false this.asyncFactory = asyncFactory this.asyncMeta = undefined this.isAsyncPlaceholder = false } } 

VNode构造函数看起来十分简单,先走一遍VNode的生成过程。

// 模版 <a class="demo" style="color: red" href="#"> generator VNode </a> // VNode描述 { 
    tag: 'a', data: { 
    calss: 'demo', attrs: { 
    href: '#' }, style: { 
    color: 'red' } }, children: ['generator VNode'] } 

这个JS对象,已经囊括了整个模板的所有信息,完全可以根据这个对象来构造真实DOM

VNode存放哪些信息

  1. data:存储节点的属性,绑定的事件等
  2. elm:真实DOM 节点
  3. context:渲染这个模板的上下文对象
  4. isStatic:是否是静态节点


VNode存放

在初始化完选项,解析完模板之后,就需要挂载DOM了。此时就需要生成VNode,才能根据 VNode生成DOM然后挂载。创建出来的VNode需要被存起来,主要存放在三个位置:parent_vnode$vnode

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/211766.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午9:39
下一篇 2026年3月18日 下午9:39


相关推荐

  • element导航菜单使用vue-router模式选中菜单项没有高亮

    element导航菜单使用vue-router模式选中菜单项没有高亮1 使用 element 的导航菜单点击当前菜单时没有高亮 解决方法问题原因 default active 的值不要写成具体的内容值 要改成 route path el menu item 种的 index 也要改成对应的路由值

    2025年6月23日
    5
  • latex更改字体大小_修改字体字号的方法

    latex更改字体大小_修改字体字号的方法Latex中的字体一共有这些种:\tiny\scriptsize\footnotesize\small\normalsize\large\Large\LARGE\huge\Huge一般来说默认的是\normalsize.我们可以在开始重新定义默认字体大小:\documnetclass[12pt]{article}修改12pt的值即可,Latex提供了三种大小:10/……

    2022年10月11日
    2
  • Response.ContentType详细说明

    Response.ContentType详细说明不同的ContentType会影响客户端所看到的效果.默认的ContentType为text/html也就是网页格式.代码如:显示的为网页,而则会显示html原代码.以下为一些常用的ContentTypeGIFimagesJPEGimagesTIFFimagesMICR

    2022年7月19日
    46
  • Modelsim下载 安装 与 和谐教程

    Modelsim下载 安装 与 和谐教程一.下载ModelsimSE-642019.2-windows网盘分享:链接:https://pan.baidu.com/s/1BASOJ1DYZYrK9Ot_BRs7HA提取码:md4d二.安装下载完压缩包后解压,安装按下图所示步骤进行。注意,完全退出杀毒软件如360,否则可能安装/和谐失败。自此安装完成,下面进行和谐。三.和谐运行patch.dll会生成LICENSE.TXT文件,将此文件另存到modelsim安装路径下。建立用户环境变量:.

    2022年6月15日
    36
  • 在java中重载和重写的区别_简述java线程生命周期

    在java中重载和重写的区别_简述java线程生命周期重写(Overriding) 重载(Overloading) 类的数量 父子类、接口与实现类 本类 方法名称 一致 一致 参数列表 一定不能修改 必须修…

    2025年9月6日
    7
  • ajax跨域问题以及解决方案_js跨域请求的三种方法

    ajax跨域问题以及解决方案_js跨域请求的三种方法出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。所谓同源(即指在同一个域)就是两个页面具有相同的协议(protocol),主机(host)和端口号(port)AJAX跨域请求下面简单模拟一个场景—–>>前端有.

    2022年8月24日
    8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号