Vue的虚拟DOM是什么

news/2024/11/17 5:31:08/

核心思想

虚拟DOM/Virtual DOM,是数据驱动视图的一种解决方案。核心思想:使用 js对象的形式来表现html的dom结构。

背景

由于现代网络和浏览器的发展,网页的内容也变得很复杂,ajax 诞生让用户可以在不刷新页面的条件下获取到数据。但是   新的数据的渲染需要操作dom,这个是比较耗性能的。所以人们想出来, 将dom转化成js也称为vdom,通过跑js程序,对比出来新vdom 和 老vodm,拿到需要更新变化的vdom,这样就可以通过dom操作,需要变化的内用。从而达到节省性能的目的。

简单来说,不再因为一部分的改动就把整体的dom重新渲染,通过筛选出来变动的内容,只渲染变动的内容。节省性能。

 vue VDom的简单例子

这个是一段 简单html dom元素

<li class="list"><a class="href-a"> 链接 </a>
</li>

 vue 中将其转化成vdom后变成(在vue中转化vdom对象, 还有很多属性,本文只是简单使用了三个,tag props children)

var vdom = {tag: 'li',props: {className: 'list',},children: [{tag: 'a',props: {className: 'href-a'},childern: ['链接']}]
}

VNode详情

Virtual DOM是通过什么类表达的?

用Vnode 类来表达vdom, 在 vue中每一个元素或者组件都对应个vnode对象。

VNode 的数据结构,还包含了VNodeData 、VNode Directive VNodeComponentOptions 等数据结构。


(I) VNode 
VNode 用来描述DOM节点的主要信息,包括tag、text、elm、data、parent 、children等。

它主要有两种生成方式,一种是由普通DOM元素生成;另一种是由Vue组件生成这两种方式生成的VNode 对象的区别主要是在componentOptions 的值上,如果是普通DOM素生成的VNode 对象,该值为空。


(2) VNodeComponentoptions 
VNode 中componentOptions 属性的数据类型用来描述通过Vue组件生成VNode 对象的些组件相关参数,包括Ctor、propData 、listeners.、parent 、children 、tag等属性。


(3) VNodeData 
VNode 中data属性的数据类型用来描述VNode 包含的一些节点数据,包括slot、mstaticclass 、style 、class 、props 、attrs 、transition 、directives 等。


(4) VNodeDirective 
VNodeData 中directives 属性的数据类型用来描述VNode 存储的指令数据,包括name value oldvalue 等

Vnode 数据结构可以参考下图:

Virtual DOM库Snabbdom

Vue2.x内部使用的Virtual DOM就是改造的Snabbdom, 有兴趣的朋友可以自行了解。https://github.com/snabbdom/snabbdom.git

参考书籍《Vue.js权威指南》


http://www.ppmy.cn/news/1423034.html

相关文章

Spring Boot 学习(3)——Spring Initializr 创建项目问题解决

产生问题的原因&#xff0c;各种的版本都较老&#xff0c;所以导致出现问题。目前暂未打到合适的教程&#xff0c;按老教程学起来先。 小白瞎学&#xff0c;大神勿喷&#xff01; 再次强调环境&#xff1a;maven 3.3.9、jdk 1.8、idea 2017、Spring 4.3.13、Spring Boot 1.5.…

关键里程碑:自然语言处理的发展历程

关键里程碑&#xff1a;自然语言处理的发展历程 自然语言处理&#xff08;NLP&#xff09;是计算机科学和人工智能的一个分支&#xff0c;致力于使计算机能够理解和处理人类语言。以下是NLP发展过程中的一些关键里程碑&#xff1a; 1950s & 60s&#xff1a;NLP的基础 1954…

什么是交叉连接:全面概述

交叉连接是数据中心上下文中使用的术语&#xff0c;指的是在两个单独的硬件单元之间建立直接链接所需的物理电缆和连接。这些连接在促进数据中心内各个组件之间的高效和安全通信方面发挥着至关重要的作用。通过在硬件单元之间创建专用网络链接&#xff0c;交叉连接消除了对基于…

【域适应】基于深度域适应MMD损失的典型四分类任务实现

关于 MMD &#xff08;maximum mean discrepancy&#xff09;是用来衡量两组数据分布之间相似度的度量。一般地&#xff0c;如果两组数据分布相似&#xff0c;那么MMD 损失就相对较小&#xff0c;说明两组数据/特征处于相似的特征空间中。基于这个想法&#xff0c;对于源域和目…

Sherlocks/Brutus

Brutus 和上一次做的 Recollection 机器一样&#xff0c;主要学习一下相关的知识&#xff0c;练习一下。按照机器描述&#xff0c;在学习完成后将熟悉 auth.log 和 wtmp 日志 auth.log auth.log 是 Linux 系统中一个重要的日志文件&#xff0c;它记录了所有与用户认证相关的行…

MobX入门指南:快速上手状态管理库

一、什么是MobX MobX 是一个状态管理库&#xff0c;它可以让你轻松地管理应用程序的状态&#xff0c;并且可以扩展和维护。它使用观察者模式来自动传播你的状态的变化到你的 React 组件。 二、安装及配置 安装 MobX 和 MobX-React&#xff1a;你可以使用 npm 或 yarn 安装这…

每日一练 | 华为认证真题练习Day217

1、BGP AS_PATH属性是一种可选过渡属性&#xff1a; A. 对 B. 错 2、路由选择工具route-policy能够给予预先定义的条件过滤并设置BGP属性&#xff0c;所以它经常被用来定义针对BGP Peer的策略&#xff0c;也经常在路由生成时期被使用&#xff0c;缺省情况下所有未匹配的路由都…

react ts react-router 6路由配置

创建一个router.tsx文件 // // 配置路由信息 import { BrowserRouter,HashRouter, Routes, Route,createBrowserRouter,useRoutes } from "react-router-dom"; import React,{useState,lazy,Component } from "react" import { JSX } from react/jsx-runt…