首页 > 其他分享 >React 的虚拟 DOM 和 Vue 的虚拟 DOM 有什么区别?

React 的虚拟 DOM 和 Vue 的虚拟 DOM 有什么区别?

时间:2024-08-16 20:16:08浏览次数:8  
标签:Vue 渲染 DOM 更新 React 虚拟

React 和 Vue 都使用虚拟 DOM (Virtual DOM) 来实现高效的 UI 渲染。

1. 引言

  • 介绍虚拟 DOM 的概念和重要性。
  • 提到 React 和 Vue 都采用了虚拟 DOM 来优化视图更新过程。

2. 什么是虚拟 DOM?

  • 定义虚拟 DOM:它是一种用 JavaScript 对象表示 UI 结构的技术。
  • 解释虚拟 DOM 如何与真实 DOM 对应,并通过差异更新 (diffing) 来高效渲染。

3. React 的虚拟 DOM 实现原理

  • React 的核心思想是使用虚拟 DOM 表示 UI,并在组件状态变化时通过 diffingreconciliation 来高效更新界面。

  • 具体步骤:

    1. React 组件通过 render 方法返回虚拟 DOM(通常是 JSX 表达式)。
    2. React 将这个虚拟 DOM 树转换为真实 DOM,并渲染到页面。
    3. 当状态或属性变化时,React 生成新的虚拟 DOM 并与之前的虚拟 DOM 进行对比,找到差异。
    4. React 只更新发生变化的部分,而不是重新渲染整个页面。
  • 重点解析:

    • Diff 算法:React 使用 O(n) 的简单算法逐层比较虚拟 DOM 树。
    • Key 属性:用于高效追踪列表元素,优化节点更新。
    • Fiber 架构:React 16 及以上版本引入了 Fiber 架构,支持异步渲染和任务切片,从而实现更平滑的用户体验。

4. Vue 的虚拟 DOM 实现原理

  • Vue 采用虚拟 DOM 是为了在响应式系统中高效管理 DOM 更新。

  • Vue 的渲染流程:

    1. Vue 组件的模板会被编译成渲染函数 (render function),生成虚拟 DOM。
    2. Vue 的响应式系统会追踪依赖,当数据变化时,触发重新渲染。
    3. Vue 通过虚拟 DOM diff 算法找出差异并更新对应的 DOM 节点。
  • 重点解析:

    • 模板编译:Vue 提供了模板语法,最终被编译为虚拟 DOM 渲染函数,这是 Vue 的优势之一。
    • 响应式系统:Vue 的响应式数据绑定和虚拟 DOM 紧密结合,能够精准控制依赖关系,从而减少不必要的更新。
    • Diff 算法:Vue 的 diff 算法和 React 类似,但在性能优化上更关注局部更新。

5. React 和 Vue 虚拟 DOM 的主要区别

  1. 模板 vs. JSX

    • Vue 支持模板语法,开发者可以直接编写 HTML 风格的代码,并通过编译生成虚拟 DOM。
    • React 使用 JSX,需要开发者编写类 XML 语法的 JavaScript 代码来定义 UI。
  2. 响应式系统

    • Vue 内置响应式系统,自动追踪依赖并在数据变化时更新视图。
    • React 中没有内置响应式系统,组件状态更新依赖 setState,并通过重新触发渲染函数来生成新的虚拟 DOM。
  3. 更新策略

    • Vue 在数据变化时只会触发与变化数据相关的部分重新渲染,具备更细粒度的控制。
    • React 通常重新渲染整个组件树,并通过虚拟 DOM diff 来确定需要更新的部分。
  4. 性能优化

    • React 的优化主要依赖 shouldComponentUpdatePureComponentmemo 来避免不必要的渲染。
    • Vue 的响应式系统在依赖追踪和模板编译阶段已经做了优化,减少了手动优化的需求。

6. 具体实现的差异

  • Fiber 架构 vs. Vue 的组件更新策略:React 的 Fiber 架构允许任务中断和优先级调度,而 Vue 在更新时则主要依赖同步批处理。
  • 调度机制:React 提供了更细粒度的渲染调度,而 Vue 则通过组件级别的更新优化整体性能。

7. 使用场景分析

  • 解释在不同的开发场景中如何选择 React 或 Vue。
  • 讨论 React 在大型、复杂应用中的优势,特别是复杂交互和异步任务管理。
  • 讨论 Vue 在中小型项目或需要快速开发时的优势,特别是其简单的响应式系统和模板语法。

 

 

1. React 中的虚拟 DOM 实现示例

import React, { useState } from 'react';
import ReactDOM from 'react-dom';

function Counter() {
  // 使用 useState 管理状态
  const [count, setCount] = useState(0);

  // JSX 渲染虚拟 DOM
  return (
    <div>
      <p>You clicked {count} times</p>
      <button onClick={() => setCount(count + 1)}>Click me</button>
    </div>
  );
}

// 渲染到真实 DOM
ReactDOM.render(<Counter />, document.getElementById('root'));

 

解析:

  • React 组件使用 useState 来管理状态,当 setCount 触发状态更新时,React 会重新渲染组件。
  • 每次组件重新渲染时,React 会通过 diffing 算法比较新的虚拟 DOM 和旧的虚拟 DOM,找出差异并更新真实 DOM。
  • 组件渲染的部分是用 JSX 表达的,它最终被转换为 JavaScript 对象(虚拟 DOM)。

2. Vue 中的虚拟 DOM 实现示例

<div id="app"></div>

<script src="https://cdn.jsdelivr.net/npm/vue@2"></script>
<script>
  new Vue({
    el: '#app',
    data() {
      return {
        count: 0
      };
    },
    // 渲染函数生成虚拟 DOM
    render(h) {
      return h('div', [
        h('p', `You clicked ${this.count} times`),
        h('button', { on: { click: this.increment } }, 'Click me')
      ]);
    },
    methods: {
      increment() {
        this.count++;
      }
    }
  });
</script>

 

解析:

  • Vue 通过 data 选项管理状态,并在模板中直接引用 this.count
  • Vue 的渲染函数 render 使用 h(createElement)函数生成虚拟 DOM 节点。与 React 的 JSX 类似,这些节点最终会转换为 JavaScript 对象,成为虚拟 DOM。
  • count 更新时,Vue 的响应式系统会触发重新渲染并进行虚拟 DOM diff,找到差异并更新真实 DOM。

标签:Vue,渲染,DOM,更新,React,虚拟
From: https://www.cnblogs.com/zx618/p/18363565

相关文章

  • 基于SpringBoot+Vue+uniapp的职业高中智慧作业试题系统源码+lw+部署文档+讲解等)
    文章目录前言详细视频演示具体实现截图技术栈后端框架SpringBoot前端框架Vue持久层框架MyBaitsPlus系统测试系统测试目的系统功能测试系统测试结论为什么选择我代码参考数据库参考源码获取前言......
  • 【Vue2学习笔记】基础(持续更新)
    一、vue介绍什么是vue?Vue是一套用于构建用户界面的渐进式框架。Vue被设计为可以自底向上逐层应用。Vue的核心库只关注视图层。vue特点1.采用组件式开发,提高代码复用率,且让代码更高维护2.声明式编码,让编码人员无需dom操作,提高开发效率3.使用虚拟机dom和优秀的di......
  • 基于flask+vue框架的的校园后台报修管理系统设计与实现[开题+论文+程序]-计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着校园信息化建设的不断深入,各类基础设施的维护与保养成为保障教学、科研及师生生活顺利进行的重要环节。然而,传统的报修方式往往依赖于......
  • 基于flask+vue框架的基于Android的大学校园车辆管理系统统后[开题+论文+程序]-计算机
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着大学校园规模的不断扩大与师生数量的激增,校园内的车辆管理问题日益凸显。传统的人工管理方式不仅效率低下,难以满足高峰时段的车辆进出......
  • 基于flask+vue框架的高校日常办公管理系统设计与实现[开题+论文+程序]-计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着高校规模的不断扩大与教育信息化的深入发展,高校日常办公管理面临着前所未有的挑战。传统的手工或半自动化管理方式已难以满足日益增长......
  • 基于flask+vue框架的大学生成绩管理系统[开题+论文+程序]-计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着高等教育的普及与信息化技术的飞速发展,大学生成绩管理成为高校教务管理中至关重要的一环。传统的手工成绩记录与管理方式不仅效率低下......
  • 5.vue中axios封装工程化
    vue工程化中axios封装视频演示地址:https://www.bilibili.com/video/BV121egeQEHg/?vd_source=0f4eae2845bd3b24b877e4586ffda69a通常我们封装需要封装request.js基础的发送请求工具类,再根据业务封装service类,service类是具体业务的接口封装,在页面上直接调用的是servive类......
  • JAVA毕业设计161—基于Java+Springboot+vue+微信小程序的校园论坛二手闲置系统(源代码
    毕设所有选题:https://blog.csdn.net/2303_76227485/article/details/131104075基于Java+Springboot+vue+微信小程序的校园论坛二手闲置系统(源代码+数据库+万字论文)161一、系统介绍本项目前后端分离带小程序,分为用户、管理员两种角色,可自行分配角色菜单1、用户:注册、......
  • “软件定义汽车”下的软件虚拟化技术
    ​01.虚拟化技术概述近年来,随着嵌入式软硬件的高速发展,嵌入式系统产品已融入日常生活的方方面面,在航空航天、车载电子、工业控制等要求更为严苛等领域的应用也更加广泛。特别对汽车领域,每辆车内ECU的使用数量已从21世纪初的30-50个飙升至上百个,其复杂程度也呈指数级上升,给汽车嵌......
  • java+vue计算机毕设基于WEB的新能源汽车充电预约系统66iq9【源码+开题+论文】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着全球对环境保护意识的增强及可持续发展战略的深入实施,新能源汽车作为减少碳排放、促进绿色出行的重要载体,其普及率正迅速提升。然而,新能源汽车的......