Vue3相关知识点笔记(持续更新中。。。。)

news2024/11/18 12:25:39

目录标题

  • 1、Vue3中的组合式Api有哪些? 和Vue2的Options Api有什么不同?
      • Vue3中的组合式API主要包括以下几个:
      • 与Vue2的option Api有什么不同
  • 2、Vue3.0的设计目标是什么?做了哪些优化?
      • 设计目标是什么?
      • 哪些优化?
  • 3、Vue3.0 所采用的 Composition Api 与 Vue2.x 使用的 Options Api 有什么不同?
  • 4、Vue2和Vue3中响应式原理及区别?
  • 5、Vue2和Vue3的区别至少说5点
  • 6、Vue3中组件通信的流程【父传子,子传父】?
  • 7、请叙述Vue2和Vue3的diff算法的区别?
  • 8、Vue3中的定义响应式数据的两个函数ref函数和reactive函数?
      • ref函数?
      • reactive函数
      • reactive和ref的对比?

1、Vue3中的组合式Api有哪些? 和Vue2的Options Api有什么不同?

Vue3中的组合式API主要包括以下几个:

  1. setup 函数:在组件创建之前执行,用于设置组件的响应式数据、计算属性、方法等。

  2. ref 函数:用于创建一个响应式的数据对象,可以通过 .value 访问和修改该数据。

  3. reactive 函数:用于创建一个响应式的数据对象,可以通过访问和修改该对象的属性来触发视图更新。

  4. computed 函数:用于创建一个计算属性,可以根据响应式数据的变化自动更新计算结果。

  5. watch 函数:用于监听响应式数据的变化,可以在数据变化时执行相应的操作。

与Vue2的option Api有什么不同

相比于Vue2的Options API,Vue3的组合式API更加灵活和易于组合。使用组合式API可以将组件的逻辑拆分成多个独立的函数,每个函数只关注自己的逻辑,便于维护和复用。此外,组合式API还可以更好地支持 TypeScript 类型推断,提高代码的可靠性和可维护性。

2、Vue3.0的设计目标是什么?做了哪些优化?

设计目标是什么?

  • 更小
    Vue3移除一些不常用的 API
  • 更快
    diff算法优化
    静态提升
    事件监听缓存
    SSR优化
  • TypeScript支持
  • API设计一致性
  • 提高自身可维护性
  • 开放更多底层功能
    vue3在兼顾vue2的options API的同时还推出了composition API,大大增加了代码的逻辑组织和代码复用能力

哪些优化?

1、源码 :

  • 源码管理 vue3整个源码是通过 monorepo的方式维护的,根据功能将不同的模块拆分到packages目录下面不同的子目录中

2、TypeScript

  • Vue3是基于typeScript编写的,提供了更好的类型检查,能支持复杂的类型推导

3、性能

  • 体积优化
  • 编译优化
  • 数据劫持优化

4、语法 API

  • 优化逻辑组织
  • 优化逻辑复用

  • Vue3的最大设计目标是替代Vue2,为了实现这一点,Vue3在以下几个方面做了很大改进,如:易用性、框架性能、扩展性、可维护性、开发体验等
  • 易用性方面主要是API简化,比如v-model在Vue3中变成了Vue2中v-model和sync修饰符的结合体,用户不用区分两者不同,也不用选择困难。类似的简化还有用于渲染函数内部生成VNode的h(type,props, children),其中props不用考虑区分属性、特性、事件等,框架替我们判断,易用性大增。
  • 开发体验方面,新组件Teleport传送门、Fragments 、Suspense等都会简化特定场景的代码编写,SFC Composition API语法糖更是极大提升我们开发体验。
  • 扩展性方面提升如独立的reactivity模块,custom renderer API等
  • 可维护性方面主要是Composition API,更容易编写高复用性的业务逻辑。还有对TypeScript支持的提升。
  • 性能方面的改进也很显著,例如编译期优化、基于Proxy的响应式系统

3、Vue3.0 所采用的 Composition Api 与 Vue2.x 使用的 Options Api 有什么不同?

在使用vue2进行开发的时候会遇到,代码的可读性随着组件的变大而便差,每一种代码复用的方式,都存在缺点,TypeScript支持有限,而这些问题vue3却可以迎刃而解

options API

选项API,即以.vue为后缀的文件,通过定义methodscomputedwatchdata等属性和方法,共同处理页面的逻辑,这种选项式的写法,如data中定义状态,methods中定义方法,然而这种情况随着组件复杂,导致对应的属性的列表也会增长,这可能会导致组件难以阅读

Compositions Api

在vue3中Compositions Api中,组件根据逻辑功能来组织的,一个功能所定义的所有Api会放在一起,更加高内聚,低耦合

对比

从逻辑组织和逻辑复用两个方面比较Compositions Api和options Api

逻辑组织
在选项式Api写法中随着组件的内容变得复杂,状态和方法的分离,使得理解和维护组件变得异常困难,并且选项分离也掩盖了组件的内层逻辑

在组合式Api的写法中属性和方法可以写在一起,在进行修改的时候可以非常的明了

逻辑复用
在选项式Api中进行逻辑复用的时候会出现命名冲突和数据来源不清晰的问题

总结

  • 在逻辑组织和逻辑复用方面,组合式Api优于选项式Api
  • 因为组合式Api几乎都是函数,会有更好的逻辑判断
  • 组合式Api对tree-shaking友好,代码也更容易压缩
  • 组合式Api中见不到this的使用,减少了this指向不明的问题

4、Vue2和Vue3中响应式原理及区别?

  • 在vue2中,通过Object.defineProperty()来进行劫持各个属性的getter,setter,再结合发布订阅模式,在数据变动的时候,发布消息给订阅者,如何更新数据渲染页面的。Vue2中的响应式原理是通过将data对象中的每个属性都转换为getter和setter函数来实现的。当数据发生变化时,setter函数会触发依赖更新,从而更新视图。Vue2中的响应式原理存在一些限制,例如无法监听新增属性、数组的变化需要通过特定的方法触发等。

  • 但是这样做的话是有缺点的,直接通过obj.a这种方法给对象添加key value值或者是通过数组下标操作数据的话,vue是监听不到的,所以在vue中提供了set和delete方法来弥补这个缺点。

  • 在vue3中,不再用Object.defineProperty(),而是使用了ES6的一个新的构造函数Proxy,Proxy可以理解成,在目标对象之前架设一层“拦截”,外界对该对象的访问,都必须先通过这层拦截,因此提供了一种机制,可以对外界的访问进行过滤和改写。Proxy这个词的原意是代理,用在这里表示由它来“代理”某些操作,可以译为“代理器”。

  • Vue3中的响应式原理使用了Proxy对象来实现。Proxy对象可以监听对象的所有属性,包括新增属性和删除属性。Vue3中的响应式原理还支持了更细粒度的依赖追踪,可以更准确地判断哪些依赖需要更新。此外,Vue3中还引入了Reactivity API,使得开发者可以更灵活地控制响应式数据的行为。

总的来说,Vue3中的响应式原理相比Vue2更加灵活、高效,可以更好地满足开发者的需求。

5、Vue2和Vue3的区别至少说5点

  • 响应式系统:
    • vue2中使用Object.defineProperty实现响应式系统。
    • vue3中使用Proxy实现响应式系统。
    • Proxy比Object.defineProperty更高效、更灵活,可以监听数组的变化。
  • 性能优化:
    • Vue3在编译器方面进行了优化,使用了静态提示和基于Proxy的响应式系统,使得渲染性更改,同时,Vue3还引入了Tree shaking,可以更好的优化打包后的代码
  • 数据和方法的定义:
    • vue2中使用的是选项类型API,Vue3中使用的是组合式API。
  • 生命周期:
    • vue3的生命周期钩子函数发生了变化,取消了beforeCreate和created钩子函数,还引入了setup函数。
  • 父子传参不同,setup()函数特性
  • TypeScript支持:Vue3对TypeScript的支持更加友好,提供了更好的类型推断和类型检查。

6、Vue3中组件通信的流程【父传子,子传父】?

  • 1、父组件向子组件传递数据

    • 父组件通过props属性将需要传递的数据传递给子组件,在子组件中定义props属性接收父组件传递的数据。
  • 2、子组件向父组件传递数据

    • 子组件在emit方法触发父组件的事件,子组件在emit方法中传递需要传递的数据,父组件中监听子组件的事件,在监听方法中获取子组件传递过来的数据
  • 3、setup中的返回值

    • 在setup函数中定义需要传递的数据或方法返回一个对象或数组
      在子组件中使用props属性获取父组件传递过来的数据,子组件通过setup函数提供的数据或方法来使用
  • 4、provide / inject

    • provide在父组件中提供需要传递的数据
      inject在子组件中获取提供的数据
      可以在组件树中遥远的组件之间进行传递

    在Vue3中,父子组件之间的通信需要通过props和$emit方法、setup函数以及provide / inject来进行。这些方式的选择需根据实际情况和项目需求和组织结构而定。需要注意的一点是,过于频繁的组件通信也可能导致应用的耦合度过高,因此,在使用时需要权衡其利弊。

7、请叙述Vue2和Vue3的diff算法的区别?

Vue2和Vue3的diff算法有以下几点区别:

  1. Vue2使用的是双指针算法,而Vue3使用的是单指针算法。Vue2的双指针算法需要同时遍历新旧节点,而Vue3的单指针算法只需要遍历新节点,可以减少一半的遍历次数。
  2. Vue3的diff算法采用了全量更新策略,即每次更新都会重新渲染整个组件树,而Vue2的diff算法采用了增量更新策略,只会更新发生变化的部分。全量更新策略可以减少diff算法的复杂度,提高渲染性能。
  3. Vue3的diff算法引入了静态标记和动态标记的概念,可以更好地处理静态节点和动态节点的更新。静态节点是指在组件渲染过程中不会发生变化的节点,动态节点是指会发生变化的节点。Vue3会对静态节点进行标记,避免重复渲染,提高渲染性能。
  4. Vue3的diff算法对于列表渲染的优化更加明显。Vue3会对列表中的节点进行缓存,避免重复创建和销毁节点,提高渲染性能。

总的来说,Vue3的diff算法在性能上有很大的提升,特别是在处理大型组件树和列表渲染时更加优秀。

8、Vue3中的定义响应式数据的两个函数ref函数和reactive函数?

ref函数?

  • 作用: 定义一个响应式的数据
  • 语法: const xxx = ref(initValue)
    • 创建一个包含响应式数据的引用对象(reference对象,简称ref对象)
    • JS中操作数据: xxx.value
    • 模板中读取数据: 不需要.value,直接:<div>{{xxx}}</div>
  • 备注:
    • 接收的数据可以是:基本类型、也可以是对象类型。
    • 基本类型的数据:响应式依然是靠Object.defineProperty()getset完成的。
    • 对象类型的数据:内部 “ 求助 ” 了Vue3.0中的一个新函数—— reactive函数。

reactive函数

  • 作用: 定义一个对象类型的响应式数据(基本类型不要用它,要用ref函数)
  • 语法:const 代理对象= reactive(源对象)接收一个对象(或数组),返回一个代理对象(Proxy的实例对象,简称proxy对象)
  • reactive定义的响应式数据是“深层次的”。
  • 内部基于 ES6 的 Proxy 实现,通过代理对象操作源对象内部数据进行操作。

reactive和ref的对比?

  • 从定义数据角度对比:
    • ref用来定义:基本类型数据
    • reactive用来定义:对象(或数组)类型数据
    • 备注:ref也可以用来定义对象(或数组)类型数据, 它内部会自动通过reactive转为代理对象
  • 从原理角度对比:
    • ref通过Object.defineProperty()getset来实现响应式(数据劫持)。
    • reactive通过使用Proxy来实现响应式(数据劫持), 并通过Reflect操作源对象内部的数据。
  • 从使用角度对比:
    • ref定义的数据:操作数据需要.value,读取数据时模板中直接读取不需要.value
    • reactive定义的数据:操作数据与读取数据:均不需要.value

笔记记录,方便自己观看,笔记不全仅供参考~~
在这里插入图片描述

------------------------------------------------------------------持续更新中。。。。---------------------------------------------------------

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

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

相关文章

python:随机森林分类器的性能评估(决策树数量的影响)

作者:CSDN @ _养乐多_ 随机森林(Random Forest)是一种强大的机器学习算法,常用于分类和回归任务。它由多个决策树构成,通过集成学习的方式进行预测。在本篇博客中,我们将探讨随机森林分类器在不同决策树数量下的性能,并绘制相应的图表进行可视化分析。OOB误差,0被误判为…

C++ 实现堆排序

时空复杂度 时间复杂度 排序复杂度 O ( n l o g n ) O(nlogn) O(nlogn) 建堆复杂度 O ( n ) O(n) O(n) 空间复杂度 由于堆排序是一种就地设计的排序算法&#xff0c;空间需求是恒定的&#xff0c;所以是O(1) 稳定性 不稳定。 C代码&#xff08;大根堆&#xff09; cla…

Jenkins持续集成之修改jenkins工作目录

修改jenkins工作目录 一般不建议把工作目录放到默认的C盘&#xff0c;故可以更改到其他盘中 前置条件&#xff1a;先在其他盘中新建工作目录的文件&#xff1b;如下图 1、首先打开任务管理器&#xff0c;找到服务中的Jenkins进程 2、右击点击转到详细信息&#xff1b; 3、再右…

洛谷P1706全排列问题题解(两种方法+详解)

问题引出 全排列问题 题目描述 按照字典序输出自然数 1 1 1 到 n n n 所有不重复的排列&#xff0c;即 n n n 的全排列&#xff0c;要求所产生的任一数字序列中不允许出现重复的数字。 输入格式 一个整数 n n n。 输出格式 由 1 ∼ n 1 \sim n 1∼n 组成的所有不重…

成为Jmeter大师:从入门到精通的环境搭建教程

一、JMeter 介绍 Apache JMeter是100%纯JAVA桌面应用程序&#xff0c;被设计为用于测试客户端/服务端结构的软件(例如web应用程序)。它可以用来测试静态和动态资源的性能&#xff0c;例如&#xff1a;静态文件&#xff0c;Java Servlet,CGI Scripts,Java Object,数据库和FTP服…

什么是 http 代理,为什么需要 http 代理?

前言&#xff1a; 在我们进行软件测试工作的时候&#xff0c;会有很多地方需要去设置代理的。 比如&#xff1a;fiddler抓包&#xff0c;jmeter录制脚本等等。 甚至于&#xff0c;在某些公司&#xff0c;去访问某些内部网址的时候&#xff0c;都需要通过连接vpn才能成功访问。…

Meaning of life :Do not wait too long and miss the opportunity

生命的意义在于机会在眼前&#xff0c;我们就要去抓住他&#xff0c;错过了可能会遗憾终身&#xff0c;不要去等待机会的到来&#xff0c;很多时候真是应一句老话, "机不可失时不再来!" 。 Dont wait too long and miss the opportunity Each spring brings a blos…

瑞吉外卖 - 修改菜品功能(18)

某马瑞吉外卖单体架构项目完整开发文档&#xff0c;基于 Spring Boot 2.7.11 JDK 11。预计 5 月 20 日前更新完成&#xff0c;有需要的胖友记得一键三连&#xff0c;关注主页 “瑞吉外卖” 专栏获取最新文章。 相关资料&#xff1a;https://pan.baidu.com/s/1rO1Vytcp67mcw-PD…

Flink第四章:水位线和窗口

系列文章目录 Flink第一章:环境搭建 Flink第二章:基本操作. Flink第三章:基本操作(二) Flink第四章:水位线和窗口 文章目录 系列文章目录前言一、水位线二、窗口二、实际案例1.自定义聚合函数2.全窗口函数3.水位线窗口4.统计用户点击数据5.处理迟到数据 总结 前言 这次博客记…

ChatGPT、GPT4、AutoGPT 和 MemoryGPT:初学者指南

人工智能 (AI) 不仅在改变行业&#xff0c;也在改变我们的日常生活。借助人工智能&#xff0c;我们可以改善我们的组织和生产力&#xff0c;让我们能够专注于真正重要的事情。在本文中&#xff0c;我们将探讨一些适用于日常生活的 AI 工具&#xff0c;以及它们如何帮助您保持井…

【Spring框架】--02.容器IoC、原理(手写IoC)

文章目录 3.容器&#xff1a;IoC3.1 IoC容器3.1.1 控制反转&#xff08;IoC&#xff09;3.1.2 依赖注入3.1.3 IoC容器在Spring的实现 3.2 基于XML管理Bean3.2.1搭建子模块spring6-ioc-xml3.2.2 获取bean①方式一&#xff1a;根据id获取②方式二&#xff1a;根据类型获取③方式三…

【Jmeter第三章】Jmeter给请求添加请求头

给请求加上请求头最常见的场景就是在请求头上添加token了&#xff0c;这里也拿添加token来举例 1、添加某个请求的请求头 1、选中HTTP请求&#xff0c;右键添加 2、添加请求头 2、添加公共的请求头信息 其实步骤和上面是一样的&#xff0c;只不过是选择&#xff1a;线程组…

极客的git常用命令手册

极客的git常用命令手册 1.1 权限配置篇1.1.1 创建ssh key1.1.2 本地存在多个密钥时&#xff0c;如何根据目标平台自动选择用于认证的密钥&#xff1f; 1.2 基础信息配置篇1.2.1 配置用户名1.2.2 配置用户邮箱1.2.3 设置文件名大小写区分1.2.4 设置命令行显示颜色1.2.5 检查git全…

MySQL高级_第11章_数据库的设计规范

MySQL高级_第11章_数据库的设计规范 1. 为什么需要数据库设计 2. 范 式 2.1 范式简介 在关系型数据库中&#xff0c;关于数据表设计的基本原则、规则就称为范式。 可以理解为&#xff0c;一张数据表的设计结构需要满足的某种设计标准的 级别 。要想设计一个结构合理的关…

如何用postman进行http接口测试?好好看好好学

目录 优点&#xff1a; 1、什么是POSTMAN 2、新建一个项目 2、新增一个用例 3、添加请求信息 4、post请求参数 5、添加头信息 6、预处理和结果检查 7、全局变量与环境变量 8、导出用例为代码 9、批量执行用例 HTTP的接口测试工具有很多&#xff0c;可以进行http请求…

打死都千万不要进外包...

我18年毕业于一个普通二本学校&#xff0c;是一个很不出名的小本科。大学期间专业知识也没有去认真的学习&#xff0c;所以毕业的时候就随便找了一份工作&#xff0c;在一个小公司做功能测试。 记得那时候薪资大概是6k左右&#xff0c;因为是在工厂&#xff0c;工作环境很差&a…

终极猜想 |欧科云链研究院揭秘货币未来形态

前言 5月18日&#xff0c;澎湃科技联合欧科云链研究院重磅发布的《从Web3“去美元化”看货币未来形态的终极猜想》文章&#xff0c;通过分析Web3.0“去美元化”的两大路径&#xff0c;对货币未来形态进行了前沿性的猜想。其中&#xff0c;Web3行业盛会Consensus2023&#xff0…

补充点【机器学习部分】

0518机器学习 身高和体重为特征&#xff0c;和标签训练阔以得到一个式子。 1.有监督学习&#xff1a; 2.训练集和测试集 3.模型学习 4.模型评估 5.基本术语 数据集&#xff1a;记录数据的集合 样本&#xff1a;每条记录关于一个事件或者对象的描述 特征&#xff1a;反映对…

软件安全-课后练习-格式化字符串-fmtstr2-随笔

一、准备工作 题目-百度网盘 1. 2.代码审计 只要输入不是yes或者no&#xff0c;就会调用到存在格式化字符串漏洞的printf函数 如果authenticated 的值为1195526213&#xff08;十六进制&#xff1a;0x47424845&#xff09;&#xff0c;就可以得到flag。 二、思路&#xf…

10. Redis哨兵(sentinel)

10. Redis哨兵sentinel 是什么&#xff1f;能干嘛怎么玩&#xff08;实战演示&#xff1a;&#xff09;Redis Sentinel架构&#xff0c;前提说明案例步骤&#xff0c;不服就干重点参数项说明其他 本次案例哨兵sentinel文件通用配置sentinel26379.confsentinel26380.confsentin…