vue2使用笔记、vue2和vue3的区别
文章目录
- vue2和vue3的区别
- 1. 实现数据响应式的原理不同
- 2. 生命周期不同
- 3. vue 2.0 采用了 option 选项式 API,vue 3.0 采用了 composition 组合式 API
- 4. 新特性编译宏
- 5. 父子组件间双向数据绑定 v-model 不同
- 6. v-for 和 v-if 优先级不同
- 7. 使用的 diff 算法不同
- 8. 兄弟组件间的通信 eventBus
- 9. vue 3.0 提供了 TypeScript 支持
- 10. 脚手架不同
- 11. 获取 DOM 的方法不同
- 12. vue-router 的使用细节
- 13. vuex 与 pinia
- 14. vue 3.0 废除了 filters 过滤器的使用
- 15. template 模版中根标签的问题
- 16. 语法细节的不同
vue2.0和3.0语法不同,使用时一定要先看版本。
现在主流都是用3.0,所以2.0单独拿出来。
vue2和vue3的区别
1. 实现数据响应式的原理不同
① vue 2.0:
通过 es5 的语法 Object.defineProperty(),数据劫持的方式实现数据的响应式。
② vue 3.0:
通过 Proxy 代理对象的方式实现数据的响应式。
因此,又多了一些定义响应式数据的方法,如 ref、reactive、roRef、toRefs。
ref:接收简单类型或者对象类型的数据传入并返回一个响应式的对象。(RefImpl)修改值,获取值的时候,需要.value。
reactive:接受对象类型数据的参数传入并返回一个代理响应式的对象。(Proxy)
toRef:转换响应式对象中某个属性为单独响应式数据,并且值是关联的。
toRefs:转换响应式对象中所有属性为单独响应式数据,并且值是关联的。
2. 生命周期不同
① vue 2.0 一共 10 个生命周期
beforeCreate
created
beforeMount
mounted
beforeUpdate
updated
activated:keep-alive 组件缓存技术,激活
deactivated:keep-alive 组件缓存技术,未激活
beforeDestroy
destroyed
② vue 3.0 一共 7 个生命周期
setup
onBeforeMount
onMounted
onBeforeUpdate
onUpdated
onBeforeUnmount
onUnmounted
总结:
废弃了 activated、deactivated 生命周期函数。
setup 函数是整个组件的起点,执行时机在 beforeCreate 之前,所以没有办法拿到当前组件实例 this。
但是 setup 函数里可以接收两个形参 props 和 context。
props 为属性
context 为当前组件实例,也是就相当于vue 2.0 中的 this。
vue 3.0 中的生命周期函数使用函数调用的方式执行,所以可以多次调用执行。
3. vue 2.0 采用了 option 选项式 API,vue 3.0 采用了 composition 组合式 API
① option API
数据定义在 data 里,属性定义在 props 里,计算属性定义在 computed 里,方法定义在 methods 里。
相较于 vue 3.0 则更易于学习和使用。
② composition API
一个功能逻辑的代码组合在一起。
相较于 vue 2.0 更易于阅读和维护。
小插曲,谈一谈自己对于 vue 2.0 和 vue 3.0 的选项式 API 和组合式 API 的理解:
vue 3.0 是在 2020 年 10 月发布的。由于写 vue 2.0 的时间比较早,所以当时在转入 vue 3.0 的时候,并没有花太多时间。感受最深的一点就是,在 vue 3.0 中无法使用 this,前文已经谈过 this 的问题,在这里不再赘述。而 vue 3.0 也可以分为两个版本,vue 3.3 以下的版本,其实感觉还是 option API 的写法,因为在 setup 函数平级的节点中,依然可以定义 props 和 components 节点,只不过是把数据和方法定义在 setup 函数里,然后通过 return 出来使用。
在 vue 3.3 及 3.3 以上的版本中,引入了
4. 新特性编译宏
常用的编译宏如下:
defineProps:定义属性
defineEmits:定义自定义的事件的触发
defineExpose:向外暴露组件的属性和方法
在非语法糖的写法中,通过 setup 函数的 return 出来了属性和方法,所以无须使用defineExpose
defineOptions:向外暴露组件的一些自定义属性,如 name
defineModel:vue 3.0 中父子组件间的双向数据绑定
const modelValue = defineModel()
5. 父子组件间双向数据绑定 v-model 不同
① vue 2.0:
父组件默认传递的属性是 value,子组件默认触发的自定义事件是 input
② vue 3.0:
父组件默认传递的属性是 modelValue,子组件默认触发的自定义事件是 update:modelValue
6. v-for 和 v-if 优先级不同
vue 2.0 中 v-for 的优先级高
vue 3.0 中 v-if 的优先级高
7. 使用的 diff 算法不同
① vue 2.0
同级比较,根元素变化,整个 dom 树删除重建
根元素未变
属性改变,更新属性
子元素内容改变
无 key 就地更新
有 key 按 key 比较
② vue 3.0
将静态节点与动态节点分离
通过高效标记和打补丁的方式,更新 dom
总结:
所以 vue 3.0 的渲染性能优于 vue 2.0
8. 兄弟组件间的通信 eventBus
vue 2.0 中的 eventBus 是一个 vue 的实例对象
vue 3.0 中的eventBus 是 mitt 库
9. vue 3.0 提供了 TypeScript 支持
10. 脚手架不同
vue 2.0 的打包工具是 webpack
vue 3.0 的打包工具是 vite
11. 获取 DOM 的方法不同
vue 2.0 直接绑定 ref,使用 this.ref.属性名的方式直接获取
vue 3.0 需要先定义 const box = ref(null),再进行绑定
12. vue-router 的使用细节
① vue 2.0
通过 this. r o u t e r 和 t h i s . router 和 this. router和this.route 拿到全局的路由对象和当前的路由对象
路由前置守卫
to: 即将要进入的目标 路由对象
from:当前导航正要离开的路由
next: Function: 一定要调用该方法来 resolve 这个钩子。执行效果依赖 next 方法的调用参数。
next(): 放行路由跳转
next(false):拦截路由跳转
const router = new VueRouter({ … })
router.beforeEach((to, from, next) => {
// …
})
② vue 3.0
通过 const router = useRouter() 和 const route = useRoute() 拿到全局的路由对象和当前的路由对象
路由前置守卫
少了 next
return false 拦截回 from 的地址页面
return undefined / true 直接放行
const router = createRouter({ … })
router.beforeEach((to, from) => {
// …
// 返回 false 以取消导航
return false
})
13. vuex 与 pinia
① vue 2.0 vuex
state 定义数据
mutations 执行同步代码,修改 state 中的数据必须通过 mutations,在组件中通过 commit 提交 mutation 的方式
actions 执行异步操作,在组件中通过中通过 dispatch 派遣 action 的方式
getters 类似于 computed 计算属性或者过滤器
modules 模块化
② vue 3.0 pinia
将 mutations 和 actions 合二为一,不在区分同步和异步操作,去掉了 modules 模块化的概念,每一个 store 都是一个独立的模块
提供了丰富的插件配置及配置对象,如在实现数据本地持久化上,可以通过插件直接配置 persist: true就可以直接实现。
当时写 vue 2.0 的项目,记得是自己封装了一个 get、set 操作 localstorage 的方法去实现本地数据的持久化
14. vue 3.0 废除了 filters 过滤器的使用
15. template 模版中根标签的问题
vue 2.0 中必须有一个根标签元素,vue 3.0 则不用
16. 语法细节的不同
此外就是一些语法上的使用细节,不做深入比较阐述了。
如:vue 3.0 一般是通过 Createxxx 创建实例
CreateApp 创建 vue 实例,2.0代码:
// app.js
new Vue({el: '#app', // 指定 Vue 实例挂载的元素data: {message: 'Hello Vue!' // 定义数据对象}
});
CreateRouter 创建路由对象,2.0代码:
import Vue from 'vue';
import Router from 'vue-router';
Vue.use(Router);
CreatePinia 创建 pinia。
相关文章:
vue2使用笔记、vue2和vue3的区别
文章目录 vue2和vue3的区别1. 实现数据响应式的原理不同2. 生命周期不同3. vue 2.0 采用了 option 选项式 API,vue 3.0 采用了 composition 组合式 API4. 新特性编译宏5. 父子组件间双向数据绑定 v-model 不同6. v-for 和 v-if 优先级不同7. 使用的 diff 算法不同8.…...
Vue2数组数字字段求和技巧 数字求和方法
<template><div><p>总和: {{ totalSum }}</p></div> </template><script> export default {data() {return {items: [{ id: 1, value: 10 },{ id: 2, value: 20 },{ id: 3, value: 30 }]};},computed: {totalSum() {return this.ite…...

vue2 , el-select 多选树结构,可重名
人家antd都支持,elementplus 也支持,vue2的没有,很烦。 网上其实可以搜到各种的,不过大部分不支持重名,在删除的时候可能会删错,比如树结构1F的1楼啊,2F的1楼啊这种同时勾选的情况。。 可以全…...

Excel处理控件Aspose.Cells教程:使用 C# 从 Excel 进行邮件合并
邮件合并功能让您能够轻松批量创建个性化文档,例如信函、电子邮件、发票或证书。您可以从模板入手,并使用电子表格中的数据进行填充。Excel 文件中的每一行都会生成一个新文档,并在正确的位置包含正确的详细信息。这是一种自动化重复性任务&a…...
Jenkins | Jenkins构建成功服务进程关闭问题
Jenkins构建成功服务进程关闭问题 1. 原因2. 解决 1. 原因 Jenkins 默认会在构建结束时终止所有由构建任务启动的子进程,即使使用了nohup或后台运行符号&。 2. 解决 在启动脚本中加上 BULID_IDdontkillme #--------------解决jenkins 自动关闭进程问题-----…...
模块化架构下的前端调试体系建设:WebDebugX 与多工具协同的工程实践
随着前端工程化的发展,越来越多的项目采用模块化架构:单页面应用(SPA)、微前端、组件化框架等。这类架构带来了良好的可维护性和复用性,但也带来了新的调试挑战。 本文结合我们在多个模块化项目中的真实经验ÿ…...

EXCEL通过DAX Studio获取端口号连接PowerBI
EXCEL通过DAX Studio获取端口号连接PowerBI 昨天我分享了EXCEL链接模板是通过获取端口号和数据库来连接PowerBI模型的,链接:浅析EXCEL自动连接PowerBI的模板,而DAX Studio可以获取处于打开状态的PowerBI的端口号。 以一个案例分享如何EXCEL…...
PostgreSQL 技术峰会,为您打造深度交流优质平台
峰会背景 PostgreSQL 作为全球领先的开源关系型数据库管理系统,凭借其强大的功能、高度的扩展性和稳定性,在云计算、大数据、人工智能等领域得到了广泛应用。随着数字化转型的加速,企业对数据库技术的需求日益复杂和多样化,Postg…...
使用 OpenCV (C++) 进行人脸边缘提取
使用 OpenCV (C) 进行人脸边缘提取 本文将介绍如何使用 C 和 OpenCV 库来检测图像中的人脸,并提取这些区域的边缘。我们将首先使用 Haar级联分类器进行人脸检测,然后在检测到的人脸区域(ROI - Region of Interest)内应用 Canny 边…...

C# 委托UI控件更新例子,何时需要使用委托
1. 例子1 private void UdpRxCallBackFunc(UdpDataStruct info) {// 1. 前置检查防止无效调用if (textBoxOutput2.IsDisposed || !textBoxOutput2.IsHandleCreated)return;// 2. 使用正确的委托类型Invoke(new Action(() >{// 3. 双重检查确保安全if (textBoxOutput2.IsDis…...

大模型数据流处理实战:Vue+NDJSON的Markdown安全渲染架构
在Vue中使用HTTP流接收大模型NDJSON数据并安全渲染 在构建现代Web应用时,处理大模型返回的流式数据并安全地渲染到页面是一个常见需求。本文将介绍如何在Vue应用中通过普通HTTP流接收NDJSON格式的大模型响应,使用marked、highlight.js和DOMPurify等库进…...
python项目如何创建docker环境
这里写自定义目录标题 python项目创建docker环境docker配置国内镜像源构建一个Docker 镜像验证镜像合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPant…...
Eureka 高可用集群搭建实战:服务注册与发现的底层原理与避坑指南
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

PyTorch--池化层(4)
池化层(Pooling Layer) 用于降低特征图的空间维度,减少计算量和参数数量,同时保留最重要的特征信息。 池化作用:比如1080p视频——720p 池化层的步长默认是卷积核的大小 ceil 允许有出界部分;floor 不允许…...
GPU加速与非加速的深度学习张量计算对比Demo,使用PyTorch展示关键差异
import torch import time # 创建大型随机张量 (10000x10000) tensor_size 10000 x_cpu torch.randn(tensor_size, tensor_size) x_gpu x_cpu.cuda() # 转移到GPU # CPU矩阵乘法 start time.time() result_cpu torch.mm(x_cpu, x_cpu.t()) cpu_time time.time() - sta…...
Vue中的自定义事件
一、前言 在 Vue 的组件化开发中,组件之间的数据通信是构建复杂应用的关键。而其中最常见、最推荐的方式之一就是通过 自定义事件(Custom Events) 来实现父子组件之间的交互。 本文将带你深入了解: Vue 中事件的基本概念如何在…...

2025年大模型平台落地实践研究报告|附75页PDF文件下载
本报告旨在为各行业企业在建设落地大模型平台的过程中,提供有效的参考和指引,助力大模型更高效更有价值地规模化落地。本报告系统性梳理了大模型平台的发展背景、历程和现状,结合大模型平台的特点提出了具体的落地策略与路径,同时…...

PPTAGENT:让PPT生成更智能
想要掌握如何将大模型的力量发挥到极致吗?叶梓老师带您深入了解 Llama Factory —— 一款革命性的大模型微调工具。 1小时实战课程,您将学习到如何轻松上手并有效利用 Llama Factory 来微调您的模型,以发挥其最大潜力。 CSDN教学平台录播地址…...
Kotlin 中 companion object 扩展函数和普通函数区别
在 Kotlin 中,companion object 的扩展函数与普通函数(包括普通成员函数和普通扩展函数)有显著区别。以下是它们的核心差异和适用场景: 1. 定义位置与归属 特性companion object 扩展函数普通函数定义位置在类外部为伴生对象添加…...

《汇编语言》第13章 int指令
中断信息可以来自 CPU 的内部和外部,当 CPU 的内部有需要处理的事情发生的时候,将产生需要马上处理的中断信息,引发中断过程。在第12章中,我们讲解了中断过程和两种内中断的处理。 这一章中,我们讲解另一种重要的内中断…...

Redis实战-基于redis和lua脚本实现分布式锁以及Redission源码解析【万字长文】
前言: 在上篇博客中,我们探讨了单机模式下如何通过悲观锁(synchronized)实现"一人一单"功能。然而,在分布式系统或集群环境下,单纯依赖JVM级别的锁机制会出现线程并发安全问题,因为这…...
Ubuntu崩溃修复方案
当Ubuntu系统崩溃时,可依据崩溃类型(启动失败、运行时崩溃、完全无响应)选择以下修复方案。以下方法综合了官方推荐和社区实践,按操作风险由低到高排序: 一、恢复模式(Recovery Mode) 适用场景:系统启动卡顿、登录后黑屏、软件包损坏等。 操作步骤: …...

计算机网络 : 应用层自定义协议与序列化
计算机网络 : 应用层自定义协议与序列化 目录 计算机网络 : 应用层自定义协议与序列化引言1. 应用层协议1.1 再谈协议1.2 网络版计算器1.3 序列化与反序列化 2. 重新理解全双工3. socket和协议的封装4. 关于流失数据的处理5. Jsoncpp5.1 特性5.2 安装5.3…...

Python Day42 学习(日志Day9复习)
补充:关于“箱线图”的阅读 以下图为例 浙大疏锦行 箱线图的基本组成 箱体(Box):中间的矩形,表示数据的中间50%(从下四分位数Q1到上四分位数Q3)。中位线(Median)&#…...

CMake在VS中使用远程调试
选中CMakeLists.txt, 右键-添加调试配置-选中"C\C远程windows调试" 之后将 aunch.vs.json文件改为如下所示: CMake在VS中使用远程调试时,Launch.vs.json中远程调试设置 ,远程电脑开启VS专用的RemoteDebugger {"version": "0.2.1","defaul…...

《图解技术体系》How Redis Architecture Evolves?
Redis架构的演进经历了多个关键阶段,从最初的内存数据库发展为支持分布式、多模型和持久化的高性能系统。以下为具体演进路径: 单线程模型与基础数据结构 Redis最初采用单线程架构,利用高效的I/O多路复用(如epoll)处…...
从零搭建到 App Store 上架:跨平台开发者使用 Appuploader与其他工具的实战经验
对于很多独立开发者或小型团队来说,开发一个 iOS 应用并不难,真正的挑战在于最后一步:将应用成功上架到 App Store。尤其是当你主要在 Windows 或 Linux 系统上开发,缺乏苹果设备和 macOS 环境时,上架流程往往变得繁琐…...
Spring Cloud 2025 正式发布啦
文章目录 一、版本兼容性二、Spring Cloud Gateway 重大更新1、新增功能1.1 Function & Stream 处理器集成1.2 Bucket4j 限流器支持 2、重要弃用2.1. WebClientRouting 基础设施2.2. 模块和启动器重命名 3、破坏性变更3.1 X-Forwarded-* 头部默认禁用3.2 配置受信任代理:3.…...

一文速通Python并行计算:12 Python多进程编程-进程池Pool
一文速通 Python 并行计算:12 Python 多进程编程-进程池 Pool 摘要: 在Python多进程编程中,Pool类用于创建进程池,可并行执行多个任务。通过map、apply等方法,将函数和参数分发到子进程,提高CPU利用率&…...
相机Camera日志分析之二十五:高通相机Camx 基于预览1帧的process_capture_request四级日志分析详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:相机Camera日志分析之二十四:高通相机Camx 基于预览1帧的process_capture_request三级日志分析详解 ok 这一篇我们开始讲: 相机Camera日志分析之二十五:高通相机Camx 基于预览1帧的process_capture_…...