Vue 2 和 Vue 3 区别

1. 响应式系统原理

  • Vue 2:利用Object.defineProperty()实现属性拦截。存在局限性,无法自动监测对象属性增减,需用Vue.set/delete;数组变异方法要重写;深层对象递归转换性能差。
  • Vue 3:采用 ES6 Proxy代理对象,能直接拦截属性访问修改。无需特殊 API 就能监测属性变化;数组操作拦截更自然;深层响应式惰性处理,提升性能。

    javascript

    // Vue 3响应式创建
    import { reactive } from 'vue';
    const state = reactive({ count: 0 });
    state.count = 1; // 修改触发更新
    

2. 组件 API 风格

  • Vue 2:以选项式 API 为主,通过datamethodscomputed等选项组织代码,大型组件易出现逻辑分散问题。
  • Vue 3:主推组合式 API,使用setup()函数或<script setup>语法,逻辑可按功能拆分为独立函数(如useFetchData()),解决代码碎片化,提高复用与维护性。

    vue

    <script setup>
    import { ref, onMounted } from 'vue';
    const count = ref(0);
    const increment = () => count.value++;
    onMounted(() => console.log('Mounted'));
    </script>
    

3. 生命周期钩子

  • Vue 2:钩子顺序为beforeCreatecreatedbeforeMountmountedbeforeUpdateupdatedbeforeDestroydestroyed
  • Vue 3:保留多数钩子但调整命名,beforeCreatecreated整合到setup()beforeDestroy改为beforeUnmountdestroyed改为unmounted。在组合式 API 中这样使用:

    javascript

    import { onMounted, onBeforeUnmount } from 'vue';
    setup() {onMounted(() => { /* ... */ });onBeforeUnmount(() => { /* ... */ });
    }
    

4. 模板编译优化

  • Vue 2:模板编译生成整体式渲染函数,更新时遍历整个虚拟 DOM 树,静态节点也参与 diff 比较,影响性能。
  • Vue 3:编译时标记静态节点(hoistStatic),避免重复创建比较;动态绑定属性标记为PatchFlag,只对比变更部分。

    html

    <div><span>静态文本</span> <!-- 静态节点 --><span :class="active">动态文本</span> <!-- 仅对比class绑定 -->
    </div>
    

5. 虚拟 DOM 实现

  • Vue 2:基于 JavaScript 对象,创建和 diff 算法简单,性能受限。
  • Vue 3:采用Proxy-based虚拟 DOM,减少内存占用;静态提升复用静态节点;双端 diff 算法高效比较子节点列表,降低 DOM 操作次数。

6. 多根节点组件

  • Vue 2:组件模板必须有单个根节点,否则报错。
  • Vue 3:支持多根节点(Fragment),无需额外包裹元素。

    vue

    <template><header>...</header><main>...</main><footer>...</footer>
    </template>
    

7. 其他特性

  • TypeScript 支持:Vue 3 设计更适配 TypeScript,组合式 API 减少类型声明冗余。
  • 自定义渲染器:Vue 3 核心库轻量,可通过@vue/runtime-core创建自定义渲染器(如渲染到 Canvas、WebGL)。
  • Teleport(传送门):新增组件,支持将内容渲染到 DOM 其他位置(如模态框)。
  • Suspense(异步组件):原生支持异步组件与等待状态,简化异步加载逻辑。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/87411.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/87411.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mv重命名报错:-bash:syntax error near unexpected token ‘(‘

文章目录 一、报错背景二、解决方法2.1、方法一&#xff1a;文件名加引号2.2、方法二&#xff1a;特殊字符前加\进行转义 一、报错背景 在linux上对一文件执行重命名时报错。原因是该文件名包含空格与括号。 文件名如下&#xff1a; aa &#xff08;1).txt执行命令及报错如下…

AWS 开源 Strands Agents SDK,简化 AI 代理开发流程

最近&#xff0c;亚马逊网络服务&#xff08;AWS&#xff09;宣布推出 Strands Agents(https://github.com/strands-agents/sdk-python)&#xff0c;这一开源软件开发工具包&#xff08;SDK&#xff09;采用模型驱动的方法&#xff0c;助力开发者仅用数行代码即可构建并运行人工…

利用 AI 打造的开发者工具集合

如图. 我利用 AI 开发了这个网站花了半个小时. 目前就上了 四个 我想到的工具。 大家可以自行体验下&#xff1a;https://xiaojinzi123.github.io 本文并不是宣传什么产品. 只是感概 Ai 真的改变我的工作方式啊. 虽然现在 AI 对于一些已有的项目进行更改代码. 由于不了解业务,…

[自然语言处理]计算语言的熵

一、要求利用给定的中英文语料&#xff0c;分别计算英语字母、英语单词、汉字、汉语词的熵&#xff0c;并和已公开结果比较&#xff0c;思考汉语的熵对汉语编码和处理的影响。二、实验内容2.1 统计英文语料的熵1.代码(1)计算英文字母的熵import math #计算每个英文字母的熵 def…

如何处理“协议异常”错误

在Java中&#xff0c;“协议异常”通常是指在网络通信或者处理特定协议相关操作时出现的异常。以下是一些处理“协议异常”错误的方法&#xff1a;一、理解协议异常的类型和原因HTTP协议异常原因&#xff1a;在进行HTTP通信时&#xff0c;可能会因为请求格式错误、响应状态码异…

Spark 4.0的VariantType 类型以及内部存储

背景 本文基于Spark 4.0 总结 Spark中的 VariantType 类型,用尽量少的字节来存储Json的格式化数据 分析 这里主要介绍 Variant 的存储,我们从VariantBuilder.buildJson方法(把对应的json数据存储为VariantType类型)开始: public static Variant parseJson(JsonParser …

跨越十年的C++演进:C++20新特性全解析

跨越十年的C演进系列&#xff0c;分为5篇&#xff0c;本文为第四篇&#xff0c;后续会持续更新C23~ 前3篇如下&#xff1a; 跨越十年的C演进&#xff1a;C11新特性全解析 跨越十年的C演进&#xff1a;C14新特性全解析 跨越十年的C演进&#xff1a;C17新特性全解析 C20标准…

LeetCode--40.组合总和II

前言&#xff1a;如果你做出来了39题&#xff0c;但是遇到40题就不会做了&#xff0c;那我建议你去再好好缕清39题的思路&#xff0c;再来看这道题&#xff0c;会有种豁然开朗的感觉解题思路&#xff1a;这道题其实与39题基本一致&#xff0c;所以本次题解是借着39题为基础来讲…

Docker Desktop 安装到D盘(包括镜像下载等)+ 汉化

目录 一、 开启电脑虚拟化 1. 搜索并打开控制面板 2. 点击程序 3. 点击启用或关闭 Windows 功能 4. 打开相关功能 5. 没有Hyper-V的情况&#xff1a; 二、配置环境 1. 更新 WSL 到最新版 2. 设置 WSL 2为默认版本 3. 安装 Ubuntu 三. WSL 迁移到D盘 1. 停止运行wsl…

基于 OpenCV 的图像 ROI 切割实现

一、引言 在计算机视觉领域&#xff0c;我们经常需要处理各种各样的图像数据。有时候&#xff0c;我们只对图像中的某一部分区域感兴趣&#xff0c;例如在一张人物照片中&#xff0c;我们可能只关注人物的脸部。在这种情况下&#xff0c;将我们感兴趣的区域从整个图像中切割出…

Linux操作系统01

一、操作系统简史 二、Linux诞生与分支 三、Linux内核与发行版 内核版本号&#xff1a;cat /proc/version 、 u name -a 操作系统内核漏洞 【超详细】CentOS编译安装升级新内核_centos源码编译安装新版本内核 ntfs-CSDN博客 四、虚拟机 五、Docker容器技术 典型靶场集成环境…

Chrome 下载文件时总是提示“已阻止不安全的下载”的解决方案

解决 Chrome 谷歌浏览器下载文件时提示“已阻止不安全的下载”的问题。 ‍ 前言 最近更新 Chrome 后&#xff0c;下载文件时总是提示“已拦截未经验证的下载内容”、“已阻止不安全的下载”&#xff1a; ‍ 身为一个互联网冲浪高手&#xff0c;这些提醒非常没有必要&#x…

RocketMQ延迟消息是如何实现的?

RocketMQ的延迟消息实现机制非常巧妙&#xff0c;其核心是通过多级时间轮 定时任务 消息重投递来实现的。以下是详细实现原理&#xff1a; ⏰ 一、延迟消息的核心设计 预设延迟级别&#xff08;非任意时间&#xff09; RocketMQ不支持任意时间延迟&#xff0c;而是预设了18个…

D3 面试题100道之(21-40)

这里是D3的面试题,我们从第 21~40题 开始逐条解答。一共100道,陆续发布中。 🟩 面试题(第 21~40 题) 21. D3 中的数据绑定机制是怎样的? D3 的数据绑定机制通过 selection.data() 方法实现。它将数据数组与 DOM 元素进行一一对应,形成三种状态: Update Selection:已…

PyTorch nn.Parameter理解及初始化方法总结

一、理解 nn.Parameter 本质是什么&#xff1f; nn.Parameter 是 torch.Tensor 的一个子类。这意味着它继承了 Tensor 的所有属性和方法&#xff08;如 .data, .grad, .requires_grad, .shape, .dtype, .device, .backward() 等&#xff09;。它本身不是一个函数或模块&#xf…

【Linux】环境基础和开发工具

Linux 软件包管理器 yum 什么是软件包 在Linux下安装软件, 一个通常的办法是下载程序的源代码, 并进行编译, 得到可执行程序. 但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安装程序)放在一个服务器上, 通过包管理器可以很方便…

多模态进化论:GPT-5V图文推理能力在工业质检中的颠覆性应用

前言 前些天发现了一个巨牛的人工智能免费学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站 &#x1f680;《多模态进化论&#xff1a;GPT-5V图文推理能力在工业质检中的颠覆性应用》 副标题&#xff1a;2025年实测报告显…

Linux实现一主二从模式

主从复制&#xff1a; 复制概念中分为两类数据库&#xff0c;一类是主数据库&#xff08;master&#xff09;&#xff0c;一类是从数据&#xff08;slave&#xff09;&#xff0c;主 数据库可以进行读写操作&#xff0c;并把写的操作同步给从数据库&#xff0c;一般从数据库是只…

大势智慧亮相第十八届中国智慧城市大会

6月26日-28日&#xff0c;第十八届中国智慧城市大会在武汉盛大举行。本次大会以“数智赋能城市创新协同共治发展蓝图”为主题&#xff0c;汇聚了李德仁、刘经南等八位院士及全国智慧城市领域的专家学者、行业精英&#xff0c;共同探讨行业发展新方向。作为实景三维技术领域领军…

Xbox One 控制器转换为 macOS HID 设备的工作原理分析

Xbox One 控制器转换为 macOS HID 设备的工作原理分析 源代码在 https://github.com/guilhermearaujo/xboxonecontrollerenabler.git 这个工程的核心功能是将 Xbox One 控制器&#xff08;macOS 原生不支持的设备&#xff09;转换为 macOS 可识别的 HID 设备。这里通过分析代…