【vue3】vue3和vue2的区别:

news2024/12/29 10:03:42

文章目录

        • Vue3框架的优点特点:
        • 一、生命周期:
        • 二、组合式api(Composition API)
        • 三、setup函数
        • 四、响应式原理
            • 1. 原理
            • 2. Object.defineProperty的缺陷
            • 3.proxy的优势
        • 五、reactive函数和ref函数
            • 1. reactive函数=》通常使用它复杂类型的响应式数据
            • 2. ref函数=》使用它定义响应式数据,不限类型
            • 3. 如何选择
        • 六、hooks
            • 1. 前言
            • 2. Vue3自定义Hooks
            • 3. hooks的作用
            • 4. Vue3自定义Hooks和Vue2时代Mixin的关系
            • 5. Hooks的各类规范
            • 六. 如何创建自己的自定义Hook


Vue3框架的优点特点:

  1. 首次渲染更快
  2. diff 算法更快
  3. 内存占用更少
  4. 打包体积更小
  5. 更好的 Typescript 支持
  6. Composition API 组合 API

一、生命周期:

对于生命周期来说,整体上变化不大,只是大部分生命周期钩子名称上 + “on”,功能上是类似的。不过有一点需要注意,Vue3组合式API(Composition API)中使用生命周期钩子时需要先引入,而 Vue2选项API(Options API)中可以直接调用生命周期钩子,如下所示。

vue2vue3说明
beforeCreatesetup组件创建之前,执行初始化任务
createdsetup组件创建完成,访问数据、获取接口数据
beforeMountonBeforeMount组件挂载之前
mountedonMounted组件挂载完成,DOM已创建,访问数据或DOM元素,访问子组件
beforeUpdateonBeforeUpdate未更新,获取更新前所有状态
updatedonUpdated组件挂载完成,DOM已创建,访问数据或DOM元素,访问子组件
beforeDestroyonBeforeUnmount未更新,获取更新前所有状态
destroyedonUnmounted组件销毁之后

Tips: setup 是围绕 beforeCreate 和 created 生命周期钩子运行的,所以不需要显式地去定义。

二、组合式api(Composition API)

【1】Vue2是选项API(Options API),一个逻辑会散乱在文件不同位置(data、props、computed、watch、生命周期钩子等),导致代码的可读性变差。当需要修改某个逻辑时,需要上下来回跳转文件位置。
【2】Vue3组合式API(Composition API)则很好地解决了这个问题,可将同一逻辑的内容写到一起,增强了代码的可读性、内聚性,其还提供了较为完美的逻辑复用性方案。所有逻辑在setup函数中,使用 ref、watch 等函数组织代码
在这里插入图片描述

三、setup函数

setup函数是组合式API的入口函数,默认导出配置选项,setup函数声明,返回模板需要数据与函数。
setup 函数是 Vue3 特有的选项,作为组合式API的起点
从组件生命周期看,它在 beforeCreate 之前执行
函数中 this 不是组件实例,是 undefined
如果数据或者函数在模板中使用,需要在 setup 返回
今后在vue3的项目中几乎用不到 this , 所有的东西通过函数获取。

四、响应式原理

1. 原理

【1】Vue2 响应式原理是利用es5的 Object.defineProperty()对数据进行劫持结合发布订阅模式来实现
【2】Vue3 响应式原理是利用es6的 proxy 对数据代理,通过reactive() 函数给每一个对象都包一层 proxy,通过 proxy 监听属性的变化,从而实现对数据的监控

2. Object.defineProperty的缺陷

【1】对象新增、删除属性没有响应式,数组新增、删除元素没有响应式;通过下标修改某个元素没有响应式;通过.length改变数组长度没有响应式。
【2】只有实例创建时 data 中有的数据实例创建后才是响应式的,给已创建好的 vue 实例 data 对象中添加属性时,数据虽然会更新,但视图不会更新,不具有响应式

3.proxy的优势

【1】proxy性能整体上优于Object.defineProperty
【2】vue3支持更多数据类型的劫持(vue2只支持Object、Array;vue3支持Object、Array、Map、WeakMap、Set、WeakSet)
【3】vue3支持更多时机来进行依赖收集和触发通知(vue2只在get时进行依赖收集,vue3在get/has/iterate时进行依赖收集;vue2只在set时触发通知,vue3在set/add/delete/clear时触发通知),所以vue2中的响应式缺陷vue3可以实现
【4】vue3做到了“精准数据”的数据劫持(vue2会把整个data进行递归数据劫持,而vue3只有在用到某个对象时,才进行数据劫持,所以响应式更快并且占内存更小)
【5】vue3的依赖收集器更容易维护(vue3监听和操作的是原生数组;vue2是通过重写的方法实现对数组的监控)

五、reactive函数和ref函数

1. reactive函数=》通常使用它复杂类型的响应式数据

使用步骤:
1.从 vue 中导入 reactive 函数
2.在 setup 函数中,使用 reactive 函数,传入一个普通对象,返回一个响应式数据对象
3.最后 setup 函数返回一个对象,包含该响应式对象即可,模板中可使用

2. ref函数=》使用它定义响应式数据,不限类型

使用步骤
1.从 vue 中导入 ref 函数
2.在 setup 函数中,使用 ref 函数,传入普通数据(简单or复杂),返回一个响应式数据
3.最后 setup 函数返回一个对象,包含该响应式数据即可
注意:使用 ref 创建的数据,js 中需要 .value ,template 中可省略

3. 如何选择

【1】reactive 可以转换对象成为响应式数据对象,但是不支持简单数据类型。
【2】ref 可以转换简单数据类型为响应式数据对象,也支持复杂数据类型,但是操作的时候需要 .value 。
【3】它们各有特点,现在也没有最佳实践,没有明显的界限,所有大家可以自由选择。
【4】如果能确定数据是对象且字段名称也确定,可使用 reactive 转成响应式数据,其他一概使用 ref 。
【5】在定义响应式数据的函数选择上,遵循:尽量使用 ref 函数支持所有场景,确定字段的对象使用 reactive 可以省去.value。

六、hooks

1. 前言
  1. hook: 直译[hʊk] 钩子
  2. Hooks在前端领域并没有明确定义,借用知乎大佬的定义:在JS里是callback,事件驱动,集成定义一些可复用的方法。
  3. 官方对自定义hook定义:在 Vue 应用的概念中,“组合式函数” (Composables) 是一个利用 Vue 组合式 API 来封装和复用有状态逻辑的函数。
2. Vue3自定义Hooks

一些可复用的方法像钩子一样挂着,可以随时被引入和调用以实现高内聚低耦合的目标,应该都能算是hook;

3. hooks的作用

以函数形式抽离一些可复用的方法像钩子一样挂着,随时可以引入和调用,实现高内聚低耦合的目标;

  1. 将可复用功能抽离为外部JS文件
  2. 函数名/文件名以use开头,形如:useXX
  3. 引用时将响应式变量或者方法显式解构暴露出来如:const {nameRef,Fn} = useXX()(在setup函数解构出自定义hooks的变量和方法)
4. Vue3自定义Hooks和Vue2时代Mixin的关系

【1】Mixin/Class的局限性

在以往VUE2的选项式API中,主要通过Mixin或是Class继承来实现逻辑复用,但这种方式有三个明显的短板:

  1. 不清晰的数据来源:当使用了多个mixin/class时,哪个数据是哪个模块提供的将变得难以追寻,这将提高维护难度
  2. 命名空间冲突:来自多个class/mixin的开发者可能会注册同样的属性名,造成冲突
  3. 隐性的跨模块交流:不同的mixin/class之间可能存在某种相互作用,产生未知的后果

【2】 Hooks的优势

其实Mixin/Class的缺点反过来就是Hooks的优点:

  1. 清晰一目了然的源头:Hooks不是一个类,没有将状态、方法存放在对象中,然后通过导出对象的形式实现复用,也就不会有对象间过度耦合、干扰等问题。Hooks中的各类状态是封装在内部的,与外界隔离,仅暴露部分函数、变量,这使得其来源、功能清晰可辨且不易被干扰
  2. 没有命名冲突的问题:Hooks本质是闭包函数,内部所导出的变量、方法支持重命名,因而同一个Hook在同一个组件中可以N次使用而不冲突
  3. 精简逻辑:一个Hook开发完成后,在使用Hook时不需要关心其内部逻辑,只需知道有什么效果、如何使用即可,专注于其他核心业务逻辑,可以节省大量重复代码
5. Hooks的各类规范
  1. Hook的命名需要以use开头,比如useTimeOut,这是约定俗成的,开发者看到useXXX即可明白这是一个Hook。>2. Hook的名称需要清楚地表明其功能
  2. 只在当前关注的最顶级作用域使用Hook,而不要在嵌套函数、循环中调用Hook
  3. 函数必须是纯函数,没有副作用
  4. 返回值是一个函数或数据,供外部使用
  5. Hook内部可以使用其他的Hook,组合功能
  6. 数据必须依赖于输入,不依赖于外部状态,保持数据流的明确性
  7. 在Hook内部处理错误,不要把错误抛出到外部,否则会增加hook的使用成本
  8. Hook是单一功能的,不要给一个Hook设计过多功能。
六. 如何创建自己的自定义Hook

在设计一个定制的Hook之前,应当至少明白以下几点:

  1. 明确自己想要的功能以及实现的效果
  2. 遵守Hook的命名规范以及其他注意事项
  3. 尽可能好的性能表现以及精简的代码
  4. 使用TypeScript

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

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

相关文章

ResNet50卷积神经网络输出数据形参分析-笔记

ResNet50卷积神经网络输出数据形参分析-笔记 ResNet50包含多个模块,其中第2到第5个模块分别包含3、4、6、3个残差块 5049个卷积(3463)*31和一个全连接层 分析结果为: 输入数据形状:[10, 3, 224, 224] 最后输出结果:linear_0 [10,…

Verilog求log10和log2近似

Verilog求log10和log2近似 Verilog求10对数近似方法,整数部分用位置index代替,小数部分用查找表实现 参考: Verilog写一个对数计算模块Log2(x) FPGA实现对数log2和10*log10

【C++】function包装器

function包装器的使用 function包装器的使用格式 function<返回类型(参数)> #include<iostream> #include<functional> using namespace std;class test { public:static void func1(int a,int b){cout << a b << endl;}void func2(int a, int …

机器学习、深度学习项目开发业务数据场景梳理汇总记录

本文的主要作用是对历史项目开发过程中接触到的业务数据进行整体的汇总梳理&#xff0c;文章会随着项目的开发推进不断更新。 一、MSTAR雷达影像数据 MSTAR&#xff08;Moving and Stationary Target Acquisition and Recognition&#xff09;雷达影像数据集是一种常用的合成…

PowerDesigner数据库设计工具使用笔记

简单记录下这个数据库设计工具的使用&#xff0c;在开发中设计数据库过程用得上&#xff0c;好记性不如烂笔头Q 显示窗口 工具类View >ToolBox 即可 选择数据库SQL语句类型是MySQL还是Orale以及版本 顶部栏中的Database 选中 第一个选项 change current DBMS 更改SQL…

HTML+CSS 改进前端简易响应式登录界面

day5 改进上次的项目 HTMLCSS前端 动态响应用户登录界面_一只名叫Me的猫的博客-CSDN博客 emmet自动创建html模板 在vscode中&#xff0c;空白html文件打入一个感叹号&#xff0c;可以自动创建html模板&#xff0c;避免手搓&#xff08;悲&#xff09;。 上次就是因为手搓导致漏…

基于vant的密码输入框,数字键盘,及金额输入

<template><div><el-button click"showPopup">余额支付</el-button><!--以下是密码输入--><van-popup v-model"passshow"closeableclose-icon-position"top-left"position"bottom":style"{ hei…

情感书单素材库大全,好的文案试试做成视频吧

当我们沉浸在热爱的小说或故事中时&#xff0c;我们会被情感所吸引&#xff0c;感受到其中所包含的情感&#xff0c;这些情感会在我们的内心深处留下印记。情感书单素材库是一个非常棒的资源&#xff0c;可以帮助我们发现那些让我们心动的故事和情感&#xff0c;从而创作出有意…

真实分享!赴日IT培训 在日本做程序员真的不加班?

如果有人告诉你完全没有加班那是不太可能的&#xff0c;但是日本的IT行业加班确实不严重&#xff0c;大家可以看一下厚生劳动省&#xff0c;你可以理解为中国的社会保障部这样一个作用&#xff0c;但是是做事风格不太一样的社会保障部&#xff0c;给大家放张IT产业加班图&#…

正运动亮相2023半导体设备材料与核心部件展示会,助力半导体产业高速高精应用

■展会名称&#xff1a; 第11届&#xff08;2023&#xff09;半导体设备材料与核心部件展示会 ■展会日期 2023年8月9日-11日 ■展馆地点 无锡太湖国际博览中心A6馆 ■展位号 A6-A361 正运动技术&#xff0c;作为国内领先的运动控制企业&#xff0c;将于2023年8月9日参加…

炼油厂运营商遭黑客入侵,全球范围内大规模宕机

据最新报道&#xff0c;以色列最大的炼油厂运营商BAZAN Group的网站遭遇黑客入侵&#xff0c;导致该网站在全球出现大范围宕机。在上周末&#xff0c;该集团全球各地的炼油厂网站均无法访问&#xff0c;显示"请求超时"和"被公司的服务器拒绝"等字样。黑客组…

排序第二课【选择排序】直接选择排序 与 堆排序

目录 1. 排序的概念&#xff1a; 2.选择排序的基本思想 3.直接选择排序 4.堆排序 1. 排序的概念&#xff1a; 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 稳定性&#xf…

RISC-V架构的演变

随着苹果基于ARM的硅和新的RISC-V CPU的推出&#xff0c;对于CPU开发来说&#xff0c;这是一个令人兴奋的时刻&#xff0c;尽管开发人员的旅程目前对后者来说有点坎坷。 我最喜欢的理论是&#xff0c;没有发生是孤独的&#xff0c;而只是重复了以前发生过的事情&#xff0c;也…

手写springboot

前言 首先确定springboot在spring基础上主要做了哪些改动&#xff1a;内嵌tomcatspi技术动态加载 一、基本实现 1. 建一个工程目录结构如下&#xff1a; springboot: 源码实现逻辑 user : 业务系统2.springboot工程项目构建 1. pom依赖如下 <dependencies>…

vue基于java的高校就业管理系统的设计和实现f0c2k

相比于传统的高校就业管理方式&#xff0c;智能化的管理方式可以大幅提高学生的就业率&#xff0c;实现了高校就业管理的标准化、制度化、程序化的管理&#xff0c;有效地防止了高校就业的随意管理&#xff0c;提高了信息的处理速度和精确度&#xff0c;能够及时、准确地查询和…

生命科学组织使用 OpenText ETX 随时随地为医疗保健和生命科学人员提供相关信息

生命科学组织使用 OpenText ETX 随时随地为医疗保健和生命科学人员提供相关信息 引领生命科学远程工作的IT新高度 生命科学组织一直承受着改进工作流程、降低成本和比以往更快地交付产品的压力。 使用远程访问和集中式 IT 基础架构&#xff0c;企业可以在加快上市时间方面取得…

opencv基础45-图像金字塔01-高斯金字塔cv2.pyrDown()

什么是图像金字塔&#xff1f; 图像金字塔&#xff08;Image> Pyramid&#xff09;是一种用于多尺度图像处理和分析的技术&#xff0c;它通过构建一系列不同分辨率的图像&#xff0c;从而使得图像可以在不同尺度下进行处理和分析。图像金字塔在计算机视觉、图像处理和计算机…

就地程控站控制柜与斗轮机之间无线通讯

一、应用背景 马钢的前身是成立于1953年的马鞍山铁厂&#xff0c;2019年马钢集团正式成为中国宝武控股子公司。马钢产品以建筑用型线材为主&#xff0c;满足重型工业厂房、轻钢结构、高层建筑、桥梁结构、工业管道等构件的加工需要。目前马钢在岗员工4.8万人&#xff0c;具备了…

三菱PLC与变频器通讯-ModbusRTU协议

Modbus是Modicon公司为其PLC与主机之间的通讯而发明的串行通讯协议。其物理层采用RS232、485等异步串行标准。由于其开放性而被大量的PLC及RTU厂家采用。Modbus通讯方式采用主从方式的查询&#xff0d;相应机制&#xff0c;只有主站发出查询时&#xff0c;从站才能给出响应&…

【快应用】list组件属性的运用指导

【关键词】 list、瀑布流、刷新、页面布局 【问题背景】 1、 页面部分内容需要瀑布流格式展示&#xff0c;在使用lsit列表组件设置columns进行多列渲染时&#xff0c;此时在里面加入刷新动画时&#xff0c;动画只占了list组件的一列&#xff0c;并没有完全占据一行宽度&…