当前位置: 首页 > news >正文

前端学习之路(4) vue2和vue3的区别

一. 根节点不同

  1. vue2中必须要有根标签
  2. vue3中可以没有根标签,会默认将多个根标签包裹在一个fragement虚拟标签中,有利于减少内存。

二. 组合式API和选项式API

  1. 在vue2中采用选项式API,将数据和函数集中起来处理,将功能点切割了当逻辑复杂的时候不利于代码阅读。
  2. 在vue3中采用组合式API,将同一个功能的代码集中起来处理,使得代码更加有序,有利于代码的书写和维护。

三. 生命周期的变化

创建前:beforeCreate -> 使用setup()
创建后:created -> 使用setup()
挂载前:beforeMount -> onBeforeMount
挂载后:mounted -> onMounted
更新前:beforeUpdate -> onBeforeUpdate
更新后:updated -> onUpdated
销毁前:beforeDestroy -> onBeforeUnmount
销毁后:destroyed -> onUnmounted
异常捕获:errorCaptured -> onErrorCaptured
被激活:onActivated 被包含在中的组件,会多出两个生命周期钩子函数。被激活时执行。
切换:onDeactivated 比如从 A 组件,切换到 B 组件,A 组件消失时执行

四. v-if和v-for的优先级

  1. 在vue2中v-for的优先级高于v-if,可以放在一起使用,但是不建议这么做,会带来性能上的浪费
  2. 在vue3中v-if的优先级高于v-for,一起使用会报错。可以通过在外部添加一个标签,将v-for移到外层

五. diff算法不同

  1. vue2中的diff算法
  • 遍历每一个虚拟节点,进行虚拟节点对比,并返回一个patch对象,用来存储两个节点不同的地方。
  • 用patch记录的消息去更新dom
  • 缺点:比较每一个节点,而对于一些不参与更新的元素,进行比较是有点消耗性能的。
  • 特点:特别要提一下Vue的patch是即时的,并不是打包所有修改最后一起操作DOM,也就是在vue中边记录变更新。(React则是将更新放入队列后集中处理)。
  1. vue3中的diff算法
  • 在初始化的时候会给每一个虚拟节点添加一个patchFlags,是一种优化的标识。
  • 只会比较patchFlags发生变化的节点,进行识图更新。而对于patchFlags没有变化的元素作静态标记,在渲染的时候直接复用。

六. 响应式原理不同

  1. vue2通过Object.definedProperty()的get()和set()来做数据劫持、结合和发布订阅者模式来实现,Object.definedProperty()会遍历每一个属性。
  2. vue3通过proxy代理的方式实现。
  3. proxy的优势:不需要像Object.definedProperty()的那样遍历每一个属性,有一定的性能提升proxy可以理解为在目标对象之前架设一层“拦截”,外界对该对象的访问都必须通过这一层拦截。这个拦截可以对外界的访问进行过滤和改写。
  4. 当属性过多的时候利用Object.definedProperty()要通过遍历的方式监听每一个属性。利用proxy则不需要遍历,会自动监听所有属性,有利于性能的提升

七. 插槽方式不同

  1. 在vue2中

匿名插槽

子组件:
<div><slot></slot>
</div>父组件:
<child><span>我是插槽插入的内容</span>
</child>

具名插槽

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

作用域插槽:父组件模板的所有东西都会在父级作用域内编译;子组件模板的所有东西都会在子级作用域内编译。不过,我们可以在父组件中使用slot-scope 特性从子组件获取数据

<div><slot :data="data"></slot>
</div>
父组件:
<child><span slot-scope="data">我是插槽插入的内容</span>
</child>
  1. 在vue3中

匿名插槽:和在vue2中一样
具名插槽:

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

作用域插槽:

子组件:
<div><slot :data="data"></slot>
</div>
父组件:
<child><span #data>我是插槽插入的内容</span>  === <span #default="{data}">我是插槽插入的内容</span>
</child>
  1. 总结:
  • 具名插槽使用方式不同:vue2使用slot=‘’,vue3使用v-slot:‘’
  • 作用域插槽使用方式不同:vue2中在父组件中使用slot-scope=“data"从子组件获取数据,vue3中在父组件中使用 #data 或者 #default=”{data}"获取

八. 样式穿透

vue2中:

/deep/ .类名{}
::v-deep .类名{}

vue3中:

:deep (.类名{})
::v-deep(.类名{})

相关文章:

前端学习之路(4) vue2和vue3的区别

一. 根节点不同 vue2中必须要有根标签vue3中可以没有根标签&#xff0c;会默认将多个根标签包裹在一个fragement虚拟标签中&#xff0c;有利于减少内存。 二. 组合式API和选项式API 在vue2中采用选项式API&#xff0c;将数据和函数集中起来处理&#xff0c;将功能点切割了当…...

网络原理-TCP/IP(5)

TCP协议 延迟应答 它也是基于滑动窗口,提高效率的一种机制,结合滑动窗口以及流量控制,能够以延迟应答ACK的方式,把反馈的窗口,搞大.核心在于允许范围内,让窗口尽可能大. 如果接收数据的主机立刻返回ACK应答,这时候返回的窗口可能比较小. 1.假设接收端缓冲区为1M.一次收到了5…...

Docker 常用命令详细介绍

Docker 是一个开源的应用容器引擎&#xff0c;它允许开发者打包他们的应用以及依赖包到一个可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&#xff0c;也可以实现虚拟化。容器是完全使用沙箱机制&#xff0c;相互之间不会有任何接口。Docker 使用概率最高的命令…...

10G PON演进到50G PON

10G-PON是万兆无源光网络&#xff0c;光纤链路传输速率能够达到10Gbps。根据ZTE的报告称&#xff0c;截至2023年6月&#xff0c;全球10G PON出货量已超过3000万个PON端口&#xff0c;其中中国市场份额约占80%。 10G PON在中国市场的广泛部署&#xff0c;显着推进了10G PON产业链…...

智能指针——浅析

智能指针 本人不才&#xff0c;只能将智能指针介绍一下&#xff0c;无法结合线程进行深入探索 介绍及作用 在异常产生进行跳转时&#xff0c;通过栈帧回收进行内存释放&#xff0c;防止内存泄漏 基于RAII思想可以创建出只能指针 RAII(Resource Acquisition Is Initializatio…...

JAVA后端上传图片至企微临时素材

1.使用场景 在使用企业微信API接口中&#xff0c;往往开发者需要使用自定义的资源&#xff0c;比如发送本地图片消息&#xff0c;设置通讯录自定义头像等。 为了实现同一资源文件&#xff0c;一次上传可以多次使用&#xff0c;这里提供了素材管理接口&#xff1a;以media_id来…...

MySQL-----初识

一 SQL的基本概述 基本概述 ▶SQL全称: Structured Query Language&#xff0c;是结构化查询语言&#xff0c;用于访问和处理数据库的标准的计算机语言。SQL语言1974年由Boyce和Chamberlin提出&#xff0c;并首先在IBM公司研制的关系数据库系统SystemR上实现。 ▶美国国家标…...

[基础IO]文件描述符{重定向/perror/磁盘结构/inode/软硬链接}

文章目录 1. 再识重定向2.浅谈perror()3.初始文件系统4.软硬链接 1. 再识重定向 图解./sf > file.txt 2>&1 1中内容拷贝给2 使得2指向file 再学一个 把file的内容传给cat cat拿到后再给file2 2.浅谈perror() open()接口调用失败返回-1,并且错误码errno被适当的设置,…...

NAS系统折腾记 – Emby搭建家庭多媒体服务器

Emby简介 Emby是一款优秀的媒体服务器软件&#xff0c;致力于为用户提供丰富的多媒体体验。通过Emby&#xff0c;您可以方便地在家庭内的各种设备上观看您喜爱的电影、电视剧和其他视频内容。而且&#xff0c;Emby还具备强大的媒体管理功能&#xff0c;让您的影视资源井然有序…...

#从零开始# 在深度学习环境中,如何用 pycharm配置使用 pipenv 虚拟环境

为Python项目创建虚拟环境 在深度学习环境和一般python环境中安装pipenv基本一致&#xff0c;只需要确认好pipenv指定的python版本即可,安装pipenv前&#xff0c;可以通过python --version来确认安装版本 快捷键&#xff1a;crtl alt S 查看interpreter&#xff0c;查看所有…...

Cmake编译Opencv3.3.1遇到有些文件无法下载的错误解决:

前言&#xff1a; 对于&#xff0c;opencv有些配置文件错误并未致命&#xff0c;所以&#xff0c;有错误也不影响后续的编译&#xff1a;但是&#xff0c;后引用如果要用&#xff0c;在回过头来还是要解决的。 问题表述&#xff1a; 比如&#xff0c;有些文件下载的错误&am…...

Python基础知识:Python序列以及序列的索引、切片、相乘和相加

索引 索引就是序列中的每个元素所在的位置&#xff0c;可以通过从左往右的正数索引&#xff0c;也可以通过从右往左的负数索引。 从左往右的正数索引&#xff1a;在python序列中&#xff0c;第一个元素的索引值为0&#xff0c;第二个元素的索引值为1&#xff0c;以此类推&…...

回归预测 | Matlab实现CPO-GRU【24年新算法】冠豪猪优化门控循环单元多变量回归预测

回归预测 | Matlab实现CPO-GRU【24年新算法】冠豪猪优化门控循环单元多变量回归预测 目录 回归预测 | Matlab实现CPO-GRU【24年新算法】冠豪猪优化门控循环单元多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现CPO-GRU【24年新算法】冠豪猪优化…...

开源项目TARZAN-NAV | 基于springboot的现代化导航网站系统

TARZAN-NAV 导航网站 一个基于 Spring Boot、MyBatis-Plus、h2database、ehcache、Docker、websocket等技术栈实现的导航网站系统&#xff0c;采用主流的互联网技术架构、全新的UI设计、支持一键源码部署&#xff0c;拥有完整的仪表板、导航管理&#xff0c;用户管理、评论管理…...

SQL查询数据之多表(关联)查询

数据表&#xff1a; 关联查询主要分为&#xff1a;&#xff08;inner join&#xff09;交叉关联、&#xff08;left join&#xff09;左关联、&#xff08;right join&#xff09;右关联 &#xff08;inner join&#xff09;交叉关联&#xff1a; 定义&#xff1a;&#xff0…...

常见的web前端开发框架介绍

Web前端开发框架是为了简化网页设计和开发的流程而创建的工具集。它们提供了预定义的组件、工具和库&#xff0c;帮助开发者快速构建交互式的用户界面。以下是一些常见的Web前端开发框架&#xff0c;以及它们的原理、基础技术和应用场景的介绍&#xff1a; 1. React **…...

CSS 选择器与相关规则详解

CSS&#xff08;Cascading Style Sheets&#xff09;的选择器是网页样式设计中至关重要的工具&#xff0c;它们允许开发者精确地定位并应用样式到HTML文档中的元素。下面将逐一介绍几种主要的选择器类型&#xff0c;以及相关的注释和规则。 1. 类选择器 (Class Selector) 类选…...

基于springboot的宠物店系统的设计与实现

文章目录 项目介绍主要功能截图&#xff1a;部分代码展示设计总结项目获取方式 &#x1f345; 作者主页&#xff1a;超级无敌暴龙战士塔塔开 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、 简历模板、学习资料、面试题库【关注我&#xff0c;都给你】 &…...

Llama2大模型开源,大模型的Android时代来了?

就昨天凌晨,微软和Meta宣布Llama2大模型开源且进一步放开商用,一下朋友圈刷屏。要知道,开源界最强大的模型就是过去Meta开源的Llama,而现在Llama2更强大,又开放商用,更有微软大模型霸主企业撑腰(微软既投资大模型界的IOS——ChatGPT,又联合发布大模型的Android——Llam…...

取出list中指定数量数据操作,操作完了删除这些数据

直接看代码吧,有注释 package com.ep.crm.task;import java.util.ArrayList; import java.util.List; import java.util.Random;public class Test {public static void main(String[] args) {List<String> list new ArrayList<String>();// 生成随机整数Random …...

嵌入式开发中全局变量的优化实践与替代方案

1. 嵌入式开发中的全局变量困境作为一名在嵌入式领域摸爬滚打多年的工程师&#xff0c;我见过太多因为滥用全局变量而陷入维护噩梦的项目。记得刚入行时接手过一个智能家居控制器的代码库&#xff0c;打开项目一看&#xff0c;光是extern声明的全局变量就有200多个&#xff0c;…...

Switch破解新选择:大气层系统稳定版完整安装与优化指南

Switch破解新选择&#xff1a;大气层系统稳定版完整安装与优化指南 【免费下载链接】Atmosphere-stable 大气层整合包系统稳定版 项目地址: https://gitcode.com/gh_mirrors/at/Atmosphere-stable 想要让你的Switch焕发新生&#xff0c;体验自制软件和游戏优化的无限可能…...

【优化求解】用于密集子图和密集子矩阵问题的凸优化附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f447; 关注我领取海量matlab电子书和数学建模资料&#x1f34a;个人信条&#xff1a;格物致知,完整Matl…...

STM32外设驱动:内存映射与寄存器操作详解

1. STM32外设驱动基础&#xff1a;内存映射与寄存器操作在嵌入式开发领域&#xff0c;STM32系列单片机因其出色的性能和丰富的外设资源而广受欢迎。要真正掌握STM32的开发&#xff0c;理解其底层外设驱动机制至关重要。让我们从一个工程师的视角&#xff0c;深入剖析STM32外设驱…...

【投资小知识】金融投资领域常说的 Alpha(α)和 Beta(β)

Alpha&#xff08;α&#xff09; 和 Beta&#xff08;β&#xff09; 是金融投资领域的两个核心概念&#xff0c;用于拆解投资收益的来源和衡量风险。它们源于资本资产定价模型&#xff08;CAPM&#xff09;&#xff0c;是量化投资和因子分析的基础。一、Beta&#xff08;β&a…...

告别迷茫!S32K312 MCU的LIN通信实战:从EB Tresos配置到代码调试全流程避坑

S32K312 MCU的LIN通信实战&#xff1a;从配置到调试的完整避坑指南 第一次在S32K312上实现LIN通信时&#xff0c;我盯着EB Tresos里密密麻麻的MCAL配置选项发呆了半小时。作为从STM32转战NXP平台的工程师&#xff0c;本以为LIN这种低速总线会很简单&#xff0c;直到实际项目中遇…...

NCM音乐格式转换完全指南:从加密困境到自由播放的解决方案

NCM音乐格式转换完全指南&#xff1a;从加密困境到自由播放的解决方案 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 一、问题解析&#xff1a;NCM格式的技术困境与用户痛点 当你下载了喜爱的音乐却发现只能在特定应用中播放&…...

游戏开发者必备免费源码网,一键搭建

一、全场景覆盖&#xff1a;从休闲小游戏到商业级项目 源码分享网的源码资源库堪称“游戏开发的全家桶”&#xff0c;覆盖了从前端交互到后端逻辑、从移动端到网页端的完整技术栈。无论是想要快速验证创意的休闲小游戏&#xff0c;还是需要搭建商业级游戏平台&#xff0c;这里…...

10块钱的PY32F00x单片机,用Keil和HAL库点灯保姆级教程(附资源包下载)

10元级PY32F00x单片机开发实战&#xff1a;从零点亮LED的完整指南 在电子爱好者和嵌入式开发者的世界里&#xff0c;性价比永远是绕不开的话题。当大多数教程还在讨论STM32时&#xff0c;一款国产的32位单片机正在悄然崛起——普冉PY32F00x系列&#xff0c;价格不到10元&#…...

AI Agent的隐私保护设计:合规前提下的用户数据使用策略

AI Agent的隐私保护设计&#xff1a;合规前提下的用户数据使用策略引言 各位技术同行、AI应用开发者、产品经理以及对用户数据与智能交互边界敏感的读者朋友们&#xff0c;大家好&#xff01;我是深耕AI工程化落地与数据治理领域8年的技术博主「码海拾遗」。在过去的3年里&…...