学习vue3 第一节

news2024/10/2 12:25:35

1、介绍vue以及vue3

Vue (发音为 /vjuː/,类似 view) 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建,并提供了一套声明式的、组件化的编程模型,帮助你高效地开发用户界面。无论是简单还是复杂的界面,Vue 都可以胜任;
相较于其他流行MVVM框架,vue更轻量更便捷更易于上手,特别是对于国内的中文文档支持,

什么是MVVM (Model-View-ViewModel)架构

(1)、View 视图层,即UI设计的用户交互界面;
(2)、ViewModel 业务逻辑控制层,即js的业务处理;
(3)、Model 数据层,即对数据的增删改查的 处理;
如图:
在这里插入图片描述
详情请移步:vue 官网

2、vue3组合式API与vue2选项式API的异同

(1)、vue3中依然支持使用选项式API,但是切记不可选项式API与组合式API混用;
(2)、对于大型项目组合式API代码更清晰、更易于维护,而选项式API中,代码逻辑声明等相互交叉,代码可读性差,而且不利于后期维护;如下图
在这里插入图片描述
(3)、生命周期钩子函数不同
在这里插入图片描述

3、vue3新增加特性

在这里插入图片描述
3.1、重写双向数据绑定
vue2 依赖于JavaScript的数据劫持订阅实现,基于Object.defineProperty()实现;
1.1、通过 Object.defineProperty() 来劫持各个属性的setter、getter,在数据变化时候,发布消息给订阅者,从而触发相应的监听回调;
1.2、Object.defineProperty() 不具备监听数组的能力,需要重写数组的方法原型,从而达到监听数组;
1.3、Object.defineProperty() 无法监听到对象新添加或者删除的属性,需要通过 $set() 手动设置监听
1.4、vue 初始化时候会通过 Object.defineProperty() 对data(){}中的属性进行遍历,从而设置相应的getter/setter 属性,而达到响应式的结果
1.5、深度监听需要递归处理,故对性能影响比较大
1.6、Object.defineProperty() 每次只能监听一个属性,多个属性需要循环监听,浪费资源
1.7、Object.defineProperty() 无法监听处理map 、set中的属性改变响应式(new Map() / new Set())

<script>
const data = {
  msg: '测试'
}
Object.defineProperty(data, 'msg', {
  get() {
    return data.msg
  },
  set(value) {
    data.msg = value
  }
})
</script>

vue3 使用es6 新特性 proxy() 实现
2.1、 通过 ES6 的Proxy() 代理对象来处理属性的响应式
2.2、 基于Proxy() 和 Reflect(), 可以监听数组的增删改查,对于对象的新增删除属性同样有效;
2.3、 不需要一次遍历所有data属性,通过标记,只更新修改项,而不是全部对比;
2.4、 ES6新属性,部分浏览器不支持;
(3)、proxy()相对于Object.defineProperty()的优势如下:

<script>
const person = {
  name: 'Andy'
}

let personProxy = new Proxy(person, {
  get(target, field) {
    // return target[field]
    return  Reflect.get(target, field)
  },
  set(target, field, value) {
    // target[field] = value
    Reflect.set(target, field, value)
  },
  deleteProperty(target, field) {
    // delete target[field]
    Reflect.deleteProperty(target, field)
  }
})
</script>
a、能监听动态新增的属性;
b、能监听删除的属性 ;
c、能监听数组的索引和 length 属性;
d、丢掉麻烦的备份数据
e、省去for in 循环
f、能监听数组变化
g、使代码更简化

3.2、优化DIFF算法
在Vue2中,每次更新diff,都是全量对比,Vue3则只对比带有标记的,这样大大减少了非动态内容的对比消耗
vue3 新增 补丁 path flag 标记,用于标记改动项;
patch flag 可以使,当你的 diff 算法走到 _createBlock 函数的时候,会忽略所有的静态节点,只对有标记的动态节点进行对比,而且在多层的嵌套下依然有效。

尽管 JavaScript 做 Vdom 的对比已经非常的快,但是 patch flag 的出现还是让 Vue3 的 Vdom 的性能得到了很大的提升,尤其是在针对大组件的时候。

原文链接:https://blog.csdn.net/qq1195566313/article/details/122768533

TEXT = 1 // 动态文本节点
CLASS=1<<1,1 // 2//动态class
STYLE=1<<2// 4 //动态style
PROPS=1<<3,// 8 //动态属性,但不包含类名和样式
FULLPR0PS=1<<4,// 16 //具有动态key属性,当key改变时,需要进行完整的diff比较。
HYDRATE_ EVENTS = 1 << 5// 32 //带有监听事件的节点
STABLE FRAGMENT = 1 << 6, // 64 //一个不会改变子节点顺序的fragment
KEYED_ FRAGMENT = 1 << 7, // 128 //带有key属性的fragment 或部分子字节有key
UNKEYED FRAGMENT = 1<< 8, // 256 //子节点没有key 的fragment
NEED PATCH = 1 << 9, // 512 //一个节点只会进行非props比较
DYNAMIC_SLOTS = 1 << 10 // 1024 // 动态slot
HOISTED = -1 // 静态节点
BALL = -2

3.3、多根节点、同时增加了 suspense teleport 以及多个v-model用法
3.4、tree shaking
用于剔除代码运行时候,没有使用代码,在保证代码正常运行时候,尽可能的去除无用代码,即在vue3中, 将全局api进行分块,如果不使用某些功能,则他们不会包含在基础包中,用以减少基础包体积;
3.5、组合式API

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

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

相关文章

c++面试一

1.#include使用 在C/C中&#xff0c;#include 预处理指令用于包含头文件&#xff0c;这些头文件通常包含了函数声明、宏定义以及其他的声明和定义。#include 指令后面跟着的文件名可以使用双引号 "" 或尖括号 <> 来指定&#xff0c;它们之间有一些区别。 双引…

Kubernetes Prometheus 系列|Prometheus介绍和使用|Prometheus+Grafana集成

目录 第1章Prometheus 入门1.1 Prometheus 的特点1.1.1 易于管理1.1.2 监控服务的内部运行状态1.1.3 强大的数据模型1.1.4 强大的查询语言 PromQL1.1.5 高效1.1.6 可扩展1.1.7 易于集成1.1.8 可视化1.1.9 开放性 1.2 Prometheus 的架构1.2.1 Prometheus 生态圈组件1.2.2 架构理…

深度学习目标检测】二十、基于深度学习的雾天行人车辆检测系统-含数据集、GUI和源码(python,yolov8)

雾天车辆行人检测在多种场景中扮演着至关重要的角色。以下是其作用的几个主要方面&#xff1a; 安全性提升&#xff1a;雾天能见度低&#xff0c;视线受阻&#xff0c;这使得驾驶者和行人在道路上的感知能力大大降低。通过车辆行人检测技术&#xff0c;可以在雾天条件下及时发现…

c++ Qt 网络连接

1、基础概念 1.1 TCP/UDP TCP 是一种面向连接的传输层协议&#xff0c;它能提供高可靠性通信(即数据无误、数据无丢失、 数据无失序、数据无重复到达的通信) 适用情况&#xff1a; 1.SN/QQ等即时通讯软件的用户登录账户管理相关的功能通常采用TCP协议 2、适合于对传输质量要求较…

[C++]使用C++部署yolov9的tensorrt模型进行目标检测

部署YOLOv9的TensorRT模型进行目标检测是一个涉及多个步骤的过程&#xff0c;主要包括准备环境、模型转换、编写代码和模型推理。 首先&#xff0c;确保你的开发环境已安装了NVIDIA的TensorRT。TensorRT是一个用于高效推理的SDK&#xff0c;它能对TensorFlow、PyTorch等框架训…

kubectl 命令行管理K8S

目录 陈述式资源管理方法 1.基本信息查看 查看版本信息 查看资源对象简写 查看集群信息 配置kubectl自动补全 node节点查看日志 查看 master 节点状态 查看命名空间 查看default命名空间的所有资源 创建命名空间yy 删除命名空间yy 在命名空间kube-public 创建副本…

户用光伏设计和工商业光伏设计有什么区别?

随着全球对可再生能源需求的不断增长&#xff0c;光伏技术作为一种高效、清洁的能源解决方案&#xff0c;正受到越来越多的关注。在光伏系统的设计和安装过程中&#xff0c;户用光伏和工商业光伏之间存在显著的差异。本文将探讨这两种类型的光伏设计之间的主要区别。 一、目标与…

List去重有几种方式

目录 1、for循环添加去重 2、for 双循环去重 3、for 双循环重复坐标去重 4、Set去重 5、stream流去重 1、for循环添加去重 List<String> oldList new ArrayList<>();oldList.add("张三");oldList.add("张三");oldList.add("李四&q…

Linux提权—服务漏洞,以MySQL-UDF提权为例

UDF(user defined function&#xff0c;用户自定义函数) 利用条件&#xff1a; 有对MySQL数据库进行创建&#xff0c;插入&#xff0c;删除的权限 secure_file_priv为空 利用过程 secure_file_priv的值为空或者是我们恰巧需要用到的目录&#xff0c;如下&#xff1a; 提权成…

MATLAB环境下一种改进的瞬时频率(IF)估计方法

相对于频率成分单一、周期性强的平稳信号来说&#xff0c;具有非平稳、非周期、非可积特性的非平稳信号更普遍地存在于自然界中。调频信号作为非平稳信号的一种&#xff0c;由于其频率时变、距离分辨率高、截获率低等特性&#xff0c;被广泛应用于雷达、地震勘测等领域。调频信…

C# OpenVINO PaddleSeg实时人像抠图PP-MattingV2

目录 效果 项目 代码 下载 C# OpenVINO 百度PaddleSeg实时人像抠图PP-MattingV2 效果 项目 代码 using OpenCvSharp; using Sdcb.OpenVINO; using System; using System.Diagnostics; using System.Drawing; using System.Security.Cryptography; using System.Text; us…

mysql 2-21

约束的分类 添加约束 查看表约束 非空约束 唯一性约束 复合的唯一性约束 只要有一个字段不重复&#xff0c;就可以添加成功 主键约束 自增列 mysql 8.0具有持久化&#xff0c;重启服务器会继续自增 外键约束 创建外键 关联必须有唯一性约束&#xff0c;或者是主键 约束等级 …

HashMap的put()方法执行流程

HashMap的数据结构在jdk1.8之前是数组链表&#xff0c;为了解决数据量过大、链表过长是查询效率会降低的问题变成了数组链表红黑树的结构&#xff0c;利用的是红黑树自平衡的特点。 链表的平均查找时间复杂度是O(n)&#xff0c;红黑树是O(log(n))。 HashMap中的put方法执行过…

MySQL认证方法介绍

阅读本文之前请参阅----MySQL 数据库安装教程详解&#xff08;linux系统和windows系统&#xff09; MySQL数据库的认证方法对于确保数据安全和维护系统完整性至关重要。在MySQL中&#xff0c;有多种认证方法可供选择&#xff0c;每种方法都有其特定的用途和配置方式。本文将详细…

Odoo系统安装部署并结合内网穿透实现固定域名访问本地ERP系统

文章目录 前言1. 下载安装Odoo&#xff1a;2. 实现公网访问Odoo本地系统&#xff1a;3. 固定域名访问Odoo本地系统 前言 Odoo是全球流行的开源企业管理套件&#xff0c;是一个一站式全功能ERP及电商平台。 开源性质&#xff1a;Odoo是一个开源的ERP软件&#xff0c;这意味着企…

九州金榜|家庭教育小技巧分享

说到家庭教育&#xff0c;每个做父母的都会有一套自己的理论&#xff0c;家庭教育也是每个家长必须学会的知识&#xff0c;下面九州金榜金榜家庭教育就为大家带来一些教育教育小技巧&#xff0c;助大家在家庭教育中得到一些启示&#xff1a; 一、树立榜样 为孩子树立好榜样&a…

【C语言基础】:操作符详解(二)

文章目录 操作符详解一、上期扩展二、单目操作符三、逗号表达式四、下标访问[]、 函数调用()五、结构成员访问操作符六、操作符的属性&#xff1a;优先级、结合性1. 优先级2. 结合性 操作符详解 上期回顾&#xff1a;【C语言基础】&#xff1a;操作符详解(一) 一、上期扩展 …

测试C#使用ViewFaceCore实现图片中的人脸遮挡

基于ViewFaceCore和DlibDotNet都能实现人脸识别&#xff0c;准备做个遮挡图片中人脸的程序&#xff0c;由于暂时不清楚DlibDotNet返回的人脸尺寸与像素的转换关系&#xff0c;最终决定使用ViewFaceCore实现图片中的人脸遮挡。   新建Winform项目&#xff0c;在Nuget包管理器中…

Windows常用协议

LLMNR 1. LLMNR 简介 链路本地多播名称解析(LLMNR)是一个基于域名系统(DNS)数据包格式的协议,可用于解析局域网中本地链路上的主机名称。它可以很好地支持IPv4和IPv6&#xff0c;是仅次于DNS 解析的名称解析协议。 2.LLMNR 解析过程 当本地hosts 和 DNS解析 当本地hosts 和 …

安装python的docker库

文章目录 一、在线安装二、制作离线安装包2.1 报错处理 一、在线安装 先确定是否有pip命令。 yum install python-pip直接安装。 pip install docker查看docker库。 pip list二、制作离线安装包 在有互联网的环境下直接安装。 #docker为下载下来的包名。 pip download do…