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. routerthis.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。

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

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

相关文章

CSS3美化页面元素

1. 字体 <span>标签 字体样式⭐ 字体类型&#xff08;font-family&#xff09; 字体大小&#xff08;font-size&#xff09; 字体风格&#xff08;font-style&#xff09; 字体粗细&#xff08;font-weight&#xff09; 字体属性&#xff08;font&#xff09; 2. 文本 文…

【笔记】Windows 下载并安装 ChromeDriver

以下是 在 Windows 上下载并安装 ChromeDriver 的笔记&#xff1a; ✅ Windows 下载并安装 ChromeDriver 1️⃣ 确认 Chrome 浏览器版本 打开 Chrome 浏览器 点击右上角 ︙ → 帮助 → 关于 Google Chrome 记下版本号&#xff0c;例如&#xff1a;114.0.5735.199 2️⃣ 下载…

工厂模式 vs 策略模式:设计模式中的 “创建者” 与 “决策者”

在日常工作里&#xff0c;需求变动或者新增功能是再常见不过的事情了。而面对这种情况时&#xff0c;那些耦合度较高的代码就会给我们带来不少麻烦&#xff0c;因为在这样的代码基础上添加新需求往往困难重重。为了保证系统的稳定性&#xff0c;我们在添加新需求时&#xff0c;…

Java web学习路径预览

Java web学习路径预览 &#xff08;图源&#xff1a;黑马程序员&#xff09; 目录 Java web学习路径预览 一、HTML、CSS、JS 1. HTML (HyperText Markup Language): 网页的骨架 2. CSS (Cascading Style Sheets): 网页的皮肤 3. JavaScript (JS): 网页的行为 二、Ajax、…

linux、docker、git相关操作

1 linux 1.1解压缩 1.1.1 zip zip xxx.zip file 把名为fle的文件压缩成xxx.zip -r 递归压缩&#xff1a;加上该选项才能压缩文件夹 zip -r example_new.zip 示例集 # 新建压缩包并命名为 example_new.zip zip -r xxx.zip file1 file2 dir1 将多个文件目录压成zip包 unzip fi…

Attention Is All You Need (Transformer) 以及Transformer pytorch实现

参考https://zhuanlan.zhihu.com/p/569527564 Attention Is All You Need (Transformer) 是当今深度学习初学者必读的一篇论文。 一. Attention Is All You Need (Transformer) 论文精读 1. 知识准备 机器翻译&#xff0c;就是将某种语言的一段文字翻译成另一段文字。 由…

深入浅出:Oracle 数据库 SQL 执行计划查看详解(1)——基础概念与查看方式

背景 在当今的软件开发领域&#xff0c;尽管主流开发模式往往倾向于采用单表模式&#xff0c;力图尽可能地减少表之间的连接操作&#xff0c;以期达到提高数据处理效率、简化应用逻辑等目的。然而&#xff0c;对于那些已经上线运行多年的运维老系统而言&#xff0c;它们内部往…

每天掌握一个Linux命令 - fail2ban

Linux 命令工具 fail2ban 使用指南 目录 Linux 命令工具 fail2ban 使用指南一、工具概述二、安装方式1. 包管理器安装&#xff08;推荐&#xff09;Debian/Ubuntu 系统CentOS/RHEL 系统Arch Linux 系统 2. 手动编译安装&#xff08;适用于自定义需求&#xff09; 三、核心功能四…

互联网大厂智能体平台体验笔记字节扣子罗盘、阿里云百炼、百度千帆 、腾讯元器、TI-ONE平台、云智能体开发平台

互联网大厂 字节扣子、阿里云百炼、百度千帆 、腾讯元器、TI-ONE平台、云智能体开发平台 体验 开始动手 了解 智能体&#xff0c;发现已经落后时代太远 光头部互联网大厂对开 公开的平台就已经这么多&#xff0c;可以学习和了解&#xff0c;相关的信息 整理了对应的平台地址…

ansible-playbook 进阶 接上一章内容

1.异常中断 做法1&#xff1a;强制正常 编写 nginx 的 playbook 文件 01-zuofa .yml - hosts : web remote_user : root tasks : - name : create new user user : name nginx-test system yes uid 82 shell / sbin / nologin - name : test new user shell : gete…

LRC and VIP

//首先排除所有数相等的情况,再把最大值放在一个组&#xff0c;那么最大值的gcd就等于其本身&#xff0c;再判断剩下的gcd是否等于最大值就可以了 #include<bits/stdc.h> using namespace std;const int N1e3100; int a[N]; map<int,int>mapp; int main(){int t;ci…

企业应用AI对向量数据库选型思考

一、向量数据库概述 向量数据库是一种专门用于存储和检索高维向量数据的数据库系统&#xff0c;它能够高效地处理基于向量相似性的查询&#xff0c;如最近邻搜索等&#xff0c;在人工智能、机器学习等领域的应用中发挥着重要作用&#xff0c;为处理复杂的向量数据提供了有力的…

设计模式——迭代器设计模式(行为型)

摘要 本文详细介绍了迭代器设计模式&#xff0c;这是一种行为型设计模式&#xff0c;用于顺序访问集合对象中的元素&#xff0c;同时隐藏集合的内部结构。文章首先定义了迭代器设计模式并阐述了其核心角色&#xff0c;包括迭代器接口、具体迭代器、容器接口和具体容器。接着&a…

Java8 list集合根据属性分组

在Java8中&#xff0c;可以使用Collectors.groupingBy方法对List集合根据属性进行分组。以下是一个完整的示例&#xff0c;展示如何根据对象的不同属性分组。 根据对象属性分组 假设有一个Student类&#xff0c;包含name、age和grade属性&#xff1a; public class Student …

更新已打包好的 Spring Boot JAR 文件中的 class 文件

# 1. 解压原始 JAR unzip -q original-app.jar -d temp # 2. 替换 class 文件 cp ~/projects/new-classes/*.class temp/BOOT-INF/classes/com/example/ # 3. 保留原始清单 cp temp/META-INF/MANIFEST.MF . # 4. 重新打包 jar -cf0m new-app.jar MANIFEST.MF -C temp/ . # …

《HelloGitHub》第 110 期

兴趣是最好的老师&#xff0c;HelloGitHub 让你对开源感兴趣&#xff01; 简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。 github.com/521xueweihan/HelloGitHub 这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等&#xff0c;涵盖多种编程语言 Python、…

当 “欧洲版 Cursor” 遇上安全危机

在 AI 编程助手蓬勃发展的当下&#xff0c;安全问题正成为行业不容忽视的隐忧。近期&#xff0c;AI 编程助手公司 Replit 与号称 “欧洲版 Cursor” 的 Lovable 之间&#xff0c;因安全漏洞问题掀起了一场风波&#xff0c;引发了业界的广泛关注。​ Replit 的员工 Matt Palmer…

centos挂载目录满但实际未满引发系统宕机

测试服务器应用系统突然挂了&#xff0c;经过排查发现是因为磁盘“满了”导致的&#xff0c;使用df -h查看磁盘使用情况/home目录使用率已经到了100%,但使用du -sh /home查看发现实际磁盘使用还不到1G&#xff0c;推测有进程正在写入或占用已删除的大文件&#xff08;Linux 系统…

乾坤qiankun的使用

vue2 为主应用 react 为子应用 在项目中安装乾坤 yarn add qiankun # 或者 npm i qiankun -Svue主应用 在main.js中新增 &#xff08;需要注意的是路由模型为history模式&#xff09; registerMicroApps([{name: reactApp,entry: //localhost:3011,container: #container,/…

PostgreSQL的扩展 auth_delay

PostgreSQL的扩展 auth_delay auth_delay 是 PostgreSQL 提供的一个安全相关扩展&#xff0c;主要用于防止暴力破解攻击。它通过在认证失败后引入人为延迟来增加暴力破解的难度。 一、扩展基础 功能&#xff1a;在认证失败后增加延迟目的&#xff1a;减缓暴力破解和字典攻击…