Vue2和Vue3的差异化(通俗易懂)
一、相同点
响应式系统(Reactive)
两者都采用 “模板 + 响应式” 的开发模式,视图自动随着状态变化而更新。
都支持双向绑定(
v-model)、条件渲染(v-if/v-show)、列表渲染(v-for)等指令。
组件化
都以组件为最小单元,支持父子组件通信(
props/$emit)。都可以通过
slot插槽机制实现组件内容分发和复用。
指令体系
Vue 2 的官方指令(
v-bind、v-on、v-model、v-show、v-if、v-for……)在 Vue 3 保持一致,仅在细节上有增强。
生命周期钩子
大部分钩子名称保持一致:
created/mounted/updated/destroyed(Vue 3 中改称为beforeUnmount/unmounted)。钩子触发顺序与逻辑和 Vue 2 基本相同。
二、核心不同点
| 维度 | Vue 2 | Vue 3 |
|---|---|---|
| 核心实现 | 基于 Object.defineProperty(getter/setter) |
基于 ES6 Proxy |
| 响应式 API | data、computed、watch |
新增 reactive、ref、computed、watch(Composition API) |
| 组件写法 | Options API(data、methods、computed、watch…) |
同时支持 Options API 和 Composition API |
| 性能 | 启动慢、体积较大,大约 33KB gzip | 启动更快、体积更小,大约 23KB gzip |
| Tree-shaking 支持 | 几乎不支持 | 完全支持,可按需打包 |
| TypeScript 支持 | 社区维护的声明文件,体验一般 | 官方支持、原生 TS 编写,类型推导更完善 |
| 新增特性 | — | Fragment、Teleport、Suspense、 <script setup> |
| 全局 API | Vue.component、Vue.directive、Vue.mixin 等 |
迁移到 app.component、app.directive,并通过 createApp 获取 app 实例 |
| 生命周期钩子 | beforeDestroy、destroyed |
beforeUnmount、unmounted(名称更语义化) |
v-model 语法 |
单一语法(v-model="value") |
多个 v-model 支持,语法改为 v-model:propName |
| 异步组件 | Vue.component('async', () => import(...)) |
同上,但更便捷,并支持 Suspense 包裹等待状态 |
1. 响应式底层
Vue 2
利用
Object.defineProperty拦截属性的 getter/setter,实现依赖收集与派发更新。对于新增属性或删除属性需手动用
Vue.set/Vue.delete。
Vue 3
改用 ES6
Proxy,可直接监听整个对象、数组的增删改,无需额外 API。性能更优,内存占用更低。
2. API 设计:Options vs Composition
Options API(两者通用)
export default {
data() { return { count: 0 } },
computed: { double() { return this.count * 2 } },
methods: { increment() { this.count++ } },
watch: { count(newVal) { console.log(newVal) } }
}Composition API(Vue 3 新增)
import { ref, computed, watch } from 'vue' export default {
setup() {
const count = ref(0)
const double = computed(() => count.value * 2)
function increment() { count.value++ }
watch(count, (newVal) => console.log(newVal))
return { count, double, increment }
}
}优点:逻辑关注点聚合,代码更 “扁平化”,便于复用和测试。
3. 性能与打包体积
Vue 3 内部重写了虚拟 DOM、模板编译器、响应式系统,显著提升渲染性能。
原生支持 Tree-shaking,生产包体积更小、加载更快。
4. TypeScript 支持
Vue 2 的 TypeScript 支持依赖社区维护的
vue-class-component、vue-property-decorator,体验不够流畅。Vue 3 从内核开始设计,所有 API 都带有类型声明,
<script setup lang="ts">让组件编写更简洁,类型推导到位。
5. 新增核心特性
| 特性 | 说明 |
|---|---|
| Fragment | 组件可返回多个根节点,无需额外包裹元素 |
| Teleport | 将子组件渲染到 DOM 的任意位置,常用于模态框、提示框等 |
| Suspense | 异步组件加载时可展示占位内容,提升用户体验 |
<script setup> |
单文件组件的简写语法,更简洁,自动推导 setup() 返回值 |
三、迁移与兼容性
全局 API 变化
// Vue2
Vue.component('MyComp', MyComp)
// Vue3 import { createApp } from 'vue'
const app = createApp(App)
app.component('MyComp', MyComp)生命周期钩子命名
Vue 2 Vue 3 beforeCreate beforeCreate created created beforeMount beforeMount mounted mounted beforeUpdate beforeUpdate updated updated beforeDestroy beforeUnmount destroyed unmounted v-model改动Vue 2 只能对
value做双向绑定。Vue 3 支持多个
v-model,并可绑定自定义 prop。
跨版本插件
大多数 Vue 2 插件在 Vue 3 下需升级才能兼容,Vue 3 官方提供 兼容构建版本.
推荐逐渐迁移业务逻辑到 Composition API,再切换核心库版本。
四、总结
相同点:核心思想不变,模板+组件+响应式,指令体系、生命周期钩子保留。
不同点:Vue 3 在响应式底层(Proxy)、API(Composition)、性能、体积、Tree‑shaking、TypeScript 支持及新特性上都有重大改进。
对于新项目,推荐直接使用 Vue 3,享受更好性能和更现代的开发体验;对于已有 Vue 2 项目,则可以先引入 Vue 3 的 Composition API 插件,逐步重构业务逻辑,再升级到 Vue 3。
Vue2和Vue3的差异化(通俗易懂)的更多相关文章
- 基于tomcat与Spring的实现差异化配置方案
起因 在实际开发过程中经常需要加载各种各样的配置文件..比如数据库的用户名密码,要加载的组件,bean等等..但是这种配置在各个环境中经常是不一样的....比如开发环境和测试环境,真实的生产环境.. ...
- (转)iOS Wow体验 - 第三章 - 用户体验的差异化策略
本文是<iOS Wow Factor:Apps and UX Design Techniques for iPhone and iPad>第三章译文精选,其余章节将陆续放出.上一篇:Wow ...
- Android Gradle基于参数化配置实现差异化构建
一.背景: 项目中有一些特殊的需求,如个别渠道集成腾讯bugly,个别渠道集成易观统计,不同的渠道集成不同的推送策略(如Oppo渠道优先Opush推送),不同的渠道拥有不同的第三方登录集成等等.这些需 ...
- Bing词典vs有道词典比对测试报告——功能篇之辅助功能,差异化功能及软件的效能
1.辅助功能: 和有道相比,必应的词典加入了换肤功能,用户可以选择喜欢的颜色,而且必应的皮肤也比较多,这一点设计给必应增色不少. 相对而言,有道则加入了调节客户端字体的大小,如下,也比较人性化 2.差 ...
- 面对对象之差异化的网络数据交互方式--单机游戏开发之无缝切换到C/S模式
上一篇这里描写叙述了一个关于差异数据在开发过程中的一个长处,这里来演示另外一个特点:单机开发之无缝切换到C/S模式 一般C/S模式都面临一个问题: 就是开发过程中的调试难题,由于涉及到client和服 ...
- 推动FPGA发展箭在弦上,国内厂商须走差异化之路
7月25日,由中国电子报与深圳投资推广署共同举办的“第六届(2018)中国FPGA产业发展论坛”在深圳召开. 作为四大通用集成电路芯片之一,FPGA(现场可编程门阵列)的重要性与CPU.存储器.DSP ...
- 利用maven实现差异化配置
回顾过去 生产环境,测试环境,开发环境在不同的环境下会有各种各样的配置,比如数据库链接地址,账户名,密码等等.不同环境下都需要配置,但是配置却又不同.以前分享过一篇文章,介绍了我之前A公司的差异化配置 ...
- 3D图形引擎决定三维产业差异化
从2009年中国3D产业初步兴起开始,短短几年间中国的3D技术得到了飞速的发展,3D打印机.3D投影仪.Web3D.虚拟现实.场景漫游等等产业应用应运而生,设备制造商和内容提供商都开始发挥自主创新的优 ...
- Vue根据不同的路由文件实现打包差异化
有些时候我们经常一个项目中开发不同的功能,有可能一个前端项目中夹杂着不同系统之间的需求,最后打包发布的时候经常会将与项目不相关的代码一同打包进去,实际来讲这种操作也是不严谨的.那有没有办法可以根据某些 ...
- 用前端姿势玩docker【五】快速构建中类Unix系统与Windows系统的差异化处理
目录 用前端姿势玩docker[一]Docker通俗理解常用功能汇总与操作埋坑 用前端姿势玩docker[二]dockerfile定制镜像初体验 用前端姿势玩docker[三]基于nvm的前端环境构建 ...
随机推荐
- 多主机网络下 Docker Swarm 模式的容器管理
分类专栏: Services/Server Management Linux Basics Linux资讯 http://www.linuxprobe.com/thread版权导读 本文将以多主 ...
- 有限Abel群的结构(1)
版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖.如要转贴,必须注明原文网址 https://www.cnblogs.com/Colin-Cai/p/18774816.html 作者:窗户 ...
- String类的特点
1.String类的特点 1.java程序中,只要是双引号字符串,就都是String类的对象 如图 只有String这一个类有这种特殊的创建对象方法 我们知道,只有对象才可以通过 点什么来调用方法,而 ...
- 【Linux】5.11 shell文件包含
Shell 文件包含 ?和其他语言一样,Shell 也可以包含外部脚本.这样可以很方便的封装一些公用的代码作为一个独立的文件. Shell 文件包含的语法格式如下: . filename # 注意点号 ...
- 【软件】在Windows和Ubuntu上使用TFTP和NFS
在Windows和Ubuntu上使用TFTP和NFS 零.介绍 最近在玩Linux开发板,在开发的过程中发现需要用到tftp和nfs来帮助传输文件,故此记录如何使用这两种软件. TFTP(Trivia ...
- java基础之String类、Math类、Arrays类、Collections类
一.String类 概述:程序中所有的双引号字符串,都是String类的对象.(就算没有new,照样算是) 特点: 1.字符串的内容用不可变[重点] 2.因为字符串[String对象]是不可变的,所以 ...
- 如何0基础学stm32?
如何0基础学stm32? 作为一个混迹嵌入式领域十余年的老兵,每次看到"0基础学STM32"这样的提问,我都忍不住想笑,又有些无奈.这就像问"如何0基础学开飞机" ...
- web自动化基础
一.浏览器驱动 下载浏览器对应版本驱动 Chromedriver下载地址:https://npm.taobao.org/mirrors/chromedriver 下载谷歌对应版本对应系统的驱动,把下载 ...
- centos7-NFS-网络文件系统
NFS(network file system)网络文件系统 pdf文档下载链接 https://files.cnblogs.com/files/duxingren/NFS.zip 服务器192.16 ...
- Spring基于注解的事务管理
Spring基于注解的事务管理 源码 代码测试 pom.xml <?xml version="1.0" encoding="UTF-8"?> < ...