Vue3学习

  • Proxy和definedProperty对比
  1. Proxy 作为新标准将受到浏览器厂商重点持续的性能优化。
  2. Proxy 不兼容IE,也没有 polyfill, defineProperty 能支持到IE9。
  3. Proxy 能观察的类型比 defineProperty 更丰富。
  4. Object.definedProperty 是劫持对象的属性,新增元素需要再次 definedProperty。而 Proxy 劫持的是整个对象,不需要做特殊处理。
  5. 使用 defineProperty 时,我们修改原来的 obj 对象就可以触发拦截,而使用 proxy,就必须修改代理对象,即 Proxy 的实例才可以触发拦截。
  6. defineProperty只能监听某个属性,不能对全对象监听,可以省去for in、闭包等内容来提升效率(直接绑定整个对象即可)。
  7. proxy 可以监听数组,不⽤再去单独的对数组做特异性操作,通过Proxy可以直接拦截所有对象类型数据的操作,完美⽀持对数组的监听。
  • vue2是把数据放入data中;
  • vue3就需要使用一个新的setup()方法,此方法在组件初始化构造的时候触发。
  • vue3 ref 跟 reactive 都是响应系统的核心方法,作为整个系统的入口。

vue3使用以下三个步骤来建立响应数据:

  1. 从vue引入reactive;( import {ref , reactive} from ‘vue’ //按需引入)
  2. 使用reactive() 方法来声明数据为响应性数据;(const _name= reactive({a:1,b:2}))
  3. 使用setup()方法来返回我们的响应性数据,从而template可以获取这些响应性数据。
  • 生命周期对比
vue2                                         vue3
beforeCreate                            ->   setup()
Created                                 ->   setup()
beforeMount                             ->   onBeforeMount
mounted                                 ->   onMounted
beforeUpdate                            ->   onBeforeUpdate
updated                                 ->   onUpdated
beforeDestroyed                         ->   onBeforeUnmount
destroyed                               ->   onUnmounted
activated                               ->   onActivated
deactivated                             ->   onDeactivated

vue2是选项式API: data,computed,methods等;

data() { return {}; }, methods:{ }

vue3是组合式API:数据和⽅法都定义在setup中,并统⼀进⾏return{}

vue3:setup(props,context){ console.log(‘props’,props)return{} }
  • 父子传参对比
  1. vue3:setup()函数接收两个参数:props、context(包含attrs、slots、emit);
  2. vue3:因为setup函数中,props是响应式得,当传入新的prop时,它将会被更新,所以不能使用es6解构,因为它会消除prop得响应性。在组合式API中,如果想在子组件中用其它变量接收props的值时需要使用toRef将props中的属性转为响应式。
  • 给父组件传值emit对比
vue2:this.$emit()
vue3:setup(props,context){context.emit()}
  • 组件通信对比

在这里插入图片描述

  • attrs和listeners对比
  1. vue2:子组件使用$attrs可以获得父组件除了props传递的属性。
  2. vue2:子组件使用$listeners可以获得父组件(不含.native修饰器的)所有v-on事件监听器。
  3. vue3:attrs不仅可以获得父组件传来的属性也可以获得父组件v-on事件监听器。
  • v-for和v-if的优先级对比
  1. vue2:v-for的优先级高于v-if,可以放在一起使用,但增加性能开销。
  2. vue3:v-if的优先级高于v-for,一起使用会报错;通过在外部添加一个标签,将v-for放在外层。
  • diff算法对比

vue2:diff算法遍历每一个虚拟节点,进行虚拟节点对比,并返回一个patch对象,用来存储两个节点不同的地方。用patch记录的消息去更新dom。缺点:比较每一个节点,而对于一些不参与更新的元素,进行比较是有点消耗性能的。
vue3:在初始化的时候会给每一个虚拟节点添加一个patchFlags,是一种优化的标识,只会比较patchFlags发生变化的节点,进行视图更新,而对于patchFlags没有变化的元素作静态标记,在渲染的时候直接使用。

  • 插槽方式对比
    vue2:匿名插槽
//子组件:
<div><slot></slot>
</div>
//父组件:
<child><span>我是插槽插入的内容</span>
</child>

vue2:具名插槽

//子组件:
<div><slot name="person"></slot>
</div>
//父组件:
<child><span slot="person">插槽插入的内容</span>
</child>

vue2:作用域插槽:父组件模板的所有代码都在父级作用域内编译;子组件模板的所有代码都在子级作用域内编译。可以在父组件中使用slot-scope 特性从子组件获取数据。

<div><slot :data="data"></slot>
</div>
//父组件:
<child><span slot-scope="data">插槽插入的内容</span>
</child>

vue3:匿名插槽和vue2一样。
具名插槽:使用v-slot:

//子组件:
<div><slot name="person"></slot>
</div>
//父组件:
<child><template v-slot:person><span>插槽插入的内容</span></template>
</child>

vue3作用域插槽:

//子组件:
<div><slot :data="data"></slot>
</div>
//父组件:
<child><span #data>插槽插入的内容</span> 或者 <span #default="{data}">插槽插入的内容</span>
</child>

总结:
具名插槽使用方式不同:vue2使用slot=‘’,vue3使用v-slot:‘’
作用域插槽使用方式不同:vue2中在父组件中使用slot-scope=“data"从子组件获取数据,vue3中在父组件中使用 #data 或者 #default=”{data}"获取。

  • 样式穿透对比

vue2

/deep/ 样式名{}
::v-deep 样式名{}

vue3

:deep (样式名{})
::v-deep(样式名{})

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

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

相关文章

FPGA应用于图像处理

FPGA应用于图像处理 FPGA&#xff08;Field-Programmable Gate Array&#xff09;直译过来就是现场可编程门阵列。是一种可以编程的逻辑器件&#xff0c;具有高度的灵活性&#xff0c;可以根据具体需求就像编程来实现不同的功能。 FPGA器件属于专用的集成电流中的一种半定制电…

适配小程序隐私保护指引设置

由于小程序发布了一个公告&#xff0c;那么接下来就是怎么改简单的问题了。毕竟不太想大的改动历史上的代码。尽量简单的适配隐私策略就可以了。 整体思路也是参考现在App普遍的启动就让用户同意隐私策略&#xff0c;不同意不让用&#xff0c;同意了之后才能够继续使用。 公告…

SpringBoot入门篇1 - 简介和工程创建

目录 SpringBoot是由Pivotal团队提供的全新框架&#xff0c; 其设计目的是用来简化Spring应用的初始搭建以及开发过程。 1.创建入门工程案例 ①创建新模块&#xff0c;选择Spring初始化&#xff0c;并配置模块相关基础信息 ②开发控制器类 controller/BookController.jav…

第P2周:彩色图片识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 我的环境&#xff1a; 语言环境&#xff1a;Python3.10.7编译器&#xff1a;VScode深度学习环境&#xff1a;TensorFlow 2.13.0 一、前期工作&#xff1a; …

2023京东酒类市场数据分析(京东数据开放平台)

根据鲸参谋平台的数据统计&#xff0c;今年7月份京东平台酒类环比集体下滑&#xff0c;接下来我们一起来看白酒、啤酒、葡萄酒的详情数据。 首先来看白酒市场。 鲸参谋数据显示&#xff0c;7月份京东平台白酒的销量为210万&#xff0c;环比下滑约49%&#xff1b;销售额将近19…

前端工程化之规范化

规范化是我们践行前端工程化中重要的一部分。 为什么要有规范化标准 俗话说&#xff0c;无规矩不成方圆&#xff0c;尤其是在开发行业中&#xff0c;更是要有严谨的工作态度&#xff0c;我们都知道大多数软件开发都不是一个人的工作&#xff0c;都是需要多人协同的&#xff0…

2023MySQL+MyBatis知识点整理

文章目录 主键 外键 的区别&#xff1f;什么是范式&#xff1f;什么是反范式&#xff1f;什么是事务&#xff1f;MySQL事务隔离级别&#xff1f;MySQL事务默认提交模式&#xff1f;MySQL中int(1)和int(10)的区别MySQL 浮点数会丢失精度吗&#xff1f;MySQL支持哪几种时间类型&a…

矢量调制分析基础

前言 本文介绍VSA 的矢量调制分析和数字调制分析测量能力。某些扫频调谐频谱分析仪也能通过使用另外的数字无线专用软件来提供数字调制分析。然而&#xff0c;VSA 通常在调制格式和解调算法配置等方面提供更大的测量灵活性&#xff0c;并提供更多的数据结果和轨迹轨迹显示。本…

nginx(七十八)nginx配置http2

一 ngx_http_v2模块 1、本文不讲解HTTP2的知识2、只讲解nginx中如何配置HTTP2 ① 前置条件 1、openssl的版本必须在1.0.2e及以上2、开启https加密,目前http2.0只支持开启了https的网站编译选项&#xff1a;--with-http_ssl_module --with-http_v2_module 特点&#xff1a…

W6100-EVB-PICO进行UDP组播数据回环测试(九)

前言 上一章我们用我们的开发板作为UDP客户端连接服务器进行数据回环测试&#xff0c;那么本章我们进行UDP组播数据回环测试。 什么是UDP组播&#xff1f; 组播是主机间一对多的通讯模式&#xff0c; 组播是一种允许一个或多个组播源发送同一报文到多个接收者的技术。组播源将…

【文心一言】如何申请获得体验资格,并简单使用它的强大功能

目录 一、文心一言1.1、它能做什么1.2、技术特点1.3、申请方法 二、功能体验2.1、文心一言2.2、写冒泡排序代码 测试代码2.3、画一个爱心2.4、画一个星空 三、申请和通过3.1、申请时间3.2、通过时间 文心一言&#xff0c;国内首个大型人工智能对话模型&#xff0c;发布已经快一…

AndroidStudio升级后总是Read Time Out的解决办法

AndroidStudio升级后在gradle的时候总是Time out&#xff0c;遇到过多次&#xff0c;总结一下解决办法 1、gradle下载超时 在工程目录../gradle/wrapper/gradle-wrapper.properties中找到gradle版本的下载链接&#xff0c;如下图&#xff1a; 将其复制到迅雷里下载&#xff0…

让eslint的错误信息显示在项目界面上

1.需求描述 效果如下 让eslint中的错误&#xff0c;显示在项目界面上 2.问题解决 1.安装 vite-plugin-eslint 插件 npm install vite-plugin-eslint --save-dev2.配置插件 // vite.config.js import { defineConfig } from vite import vue from vitejs/plugin-vue import e…

MySQL高级篇——MySQL架构篇1(Linux下MySQL8的安装与使用)

目录 0 安装前0.1 Linux系统及工具的准备0.2 查看是否安装过MySQL0.3 MySQL的卸载 1 MySQL8的Linux版安装1.1 MySQL的4大版本1.2 下载MySQL指定版本1.3 CentOS7下检查MySQL依赖1.4 CentOS7下MySQL安装过程 2 MySQL登录2.1 首次登录2.2 修改密码2.3 设置远程登录 3 MySQL 8 的密…

【Linux】动态库和静态库

动态库和静态库 软链接硬链接硬链接要注意 自定义实现一个静态库(.a)解决、使用方法静态库的内部加载过程 自定义实现一个动态库&#xff08;.so&#xff09;动态库加载过程 静态库和动态库的特点 软链接 命令:ln -s 源文件名 目标文件名 软链接是独立连接文件的&#xff0c;他…

【从零学习python 】69. 网络通信及IP地址分类解析

文章目录 网络通信的概念IP地址IP地址的分类A类地址B类地址C类地址D类地址E类地址私有地址 进阶案例 网络通信的概念 简单来说&#xff0c;网络是用物理链路将各个孤立的工作站或主机相连在一起&#xff0c;组成数据链路&#xff0c;从而达到资源共享和通信的目的。 使用网络…

interview2-框架篇

一、Spring篇 1、Spring &#xff08;1&#xff09;Bean线程安全问题 不是线程安全的。Spring框架中有一个Scope注解&#xff0c;默认的值就是singleton&#xff0c;单例的。因为一般在spring的bean的中都是注入无状态的对象&#xff0c;没有线程安全问题&#xff0c;如果在b…

SQL注入之布尔盲注

文章目录 布尔盲注是什么&#xff1f;布尔盲注获取sqli-labs名称 布尔盲注是什么&#xff1f; 当存在SQL注入时&#xff0c;攻击者无法通过页面或请求的返回信息&#xff0c;回显或获取到SQL注入语句的执行结果&#xff0c;这种情况就叫盲注。 布尔型盲注就是利用返回的True或F…

portainer初体验

官方文档 安装 docker 这里采用的的是国内汉化的一个镜像&#xff0c;版本号2.16.2。 地址 docker run -d --restartalways --name"portainer" -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock 6053537/portainer-ce体验 访问9000端口。 尝试&#x…

基于黏菌算法优化的BP神经网络(预测应用) - 附代码

基于黏菌算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码 文章目录 基于黏菌算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码1.数据介绍2.黏菌优化BP神经网络2.1 BP神经网络参数设置2.2 黏菌算法应用 4.测试结果&#xff1a;5.Matlab代码 摘要…