Vue.js 比较重要知识点总结一

news2024/11/23 21:41:35

概述

  • 谈一谈你对 Vue.js 的响应式数据的理解
  • Vue3 出现解决了什么问题?它有哪些优势?
  • Vue3 新特性有哪些
  • vue2 和 vue3 的响应式有什么区别?

谈一谈你对 Vue.js 的响应式数据的理解

Vue 2.x

对象类型:通过 object.defineProperty() 对属性的读取、修改进行拦截(数据劫持)
数组类型:通过 重写更新数组的一系列方法 来实现拦截(对数组的变更方法进行了包裹

Object.defineProperty 【https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty】

  • 当你把一个普通的 JavaScript 对象传入 Vue 实例作为 data 选项, Vue 将遍历此对象所有的property,并使用 Object.defineProperty 把这些 property 全部转为 getter/setter
    • Object.defineProperty 是 ES5 中一个无法 shim 的特性,这也就是 Vue 不支持 IE8 以及 更低版本浏览器的原因。
  • 当使用这些数据属性时,会进行依赖收集(收集到当前组件的 watcher)
    • 每个组件都对应一个 watcher 实例,它会在组件渲染的过程中把“接触”过的数据记录为依赖之后当依赖项的 setter 触发时,会通知 watcher,从而使它关联的组件重新渲染

存在问题:

  • 新增属性、删除属性,界面不会更新
  • 直接通过下标修改数组,界面不会自动更新

更多精彩内容,请微信搜索“前端爱好者戳我 查看

Vue 3.x

通过Proxy(代理): 拦截对象中任意属性的变化,包括:属性值的读写,属性的增加,属性的删除等。

通过Reffect(反射): 对源对象的属性进行操作

Proxy 是 ECMAScript 6 中新增的属性。【https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Proxy】

MDN文档中描述的 ProxyReflect

proxy

Proxy 对象用于创建一个对象的代理,从而实现基本操作的拦截和自定义(如属性查找、赋值、枚举、函数调用等)。

被 Proxy 代理虚拟化的对象。它常被作为代理的存储后端。根据目标验证关于对象不可扩展性或不可配置属性的不变量(保持不变的语义)。

语法

const p = new Proxy(target, handler)

参数:

target:

要使用 Proxy 包装的目标对象(可以是任何类型的对象,包括原生数组,函数,甚至另一个代理)。

handler:

一个通常以函数作为属性的对象,各属性中的函数分别定义了在执行各种操作时代理 p 的行为。

new Proxy(data,{
  //拦截读取属性值
  get(target, prop){
    return Reflect.get(target, prop)
  },
  //拦截设置属性值或添加新属性
  set(target, prop, value){
    return Reflect.set(target, prop, value)
  },
  //拦截删除属性
  deleteProperty(target, prop){
    return Reflect.deleteProperty(target, prop)
  }
})

Reffect

Reflect 是一个内置的对象,它提供拦截 JavaScript 操作的方法。Reflect不是一个函数对象,因此它是不可构造的。

reffect身上,就有**defineProperty()**这个方法

在Vue3数据的更新是proxy配合Reffect来实现的。

Proxy 与 Object.defineProperty 优劣对比

Proxy 的优势如下:

  • Proxy 可以直接监听对象而非属性;
  • Proxy 可以直接监听数组的变化;
  • Proxy 有多达 13 种拦截方法,不限于 apply、ownKeys、deleteProperty、has 等等是Object.defineProperty 不具备的;
  • Proxy 返回的是一个新对象,我们可以只操作新的对象达到目的,而 Object.defineProperty 只能遍历对象属性直接修改;
  • Proxy 作为新标准将受到浏览器厂商重点持续的性能优化,也就是传说中的新标准的性能红利;

Object.defineProperty 的优势如下:

  • 兼容性好,支持 IE9,而 Proxy 的存在浏览器兼容性问题,而且无法用 polyfill 磨平,因此 Vue3.0才用 Proxy 重写。

总结

  • 在Vue2中,数据响应式主要借助**Object.defineProperty()**来实现,存在的缺陷是无法操作数据的增加和删除,
  • 在Vue3中,数据响应式主要借助proxyReffect配合实现,可以做到实现数据的增删改查。

Vue3 出现解决了什么问题?它有哪些优势?

Vue2 代码模式下存在的几个问题:

  • 随着功能增加,复杂的组件代码越来越多,变得难以维护。主要原因是 vue2 通过选项式API组织的代码,一个逻辑功能可能有多处代码,不易别人上手。
  • 缺少一个比较干净的在多个组件之间可以提取和复用逻辑的机制。
  • 类型推断不友好。
  • 没有静态类型检查,只有代码运行之后才能发现错误等等。

Vue3 是在 Vue2 的基础上进行了一些优化,对 typeScript 有了更好的支持。

Vue3 和 Vue2 是可以共存的,Vue3 能够向下兼容支持选项式 API ,同时又新增了一些特性,大大提升了性能。

Vue3 的优势:

  • 性能更好
  • 体积更小
  • 更好地 ts 支持
  • 更好的代码组织
  • 更好的逻辑抽离
  • 更多新的功能

Vue3 新特性有哪些

性能提升

响应式性能提升,由原来的 Object.defineProperty 改为基于ES6的 Proxy ,使其速度更快,消除警告。
重写了 Vdom ,突破了 Vdom 的性能瓶颈。
进行模板编译优化。
更加高效的组件初始化。

更好的支持 typeScript

有更好的类型推断,使得 Vue3 把 typeScript 支持得非常好。

新增Composition API

Composition API 是 vue3 新增的功能,比 mixin 更强大。它可以把各个功能模块独立开来,提高代码逻辑的可复用性,同时代码压缩性更强。

新增组件

  • Fragment 不再限制 template 只有一个根几点。
  • Teleport 传送门,允许我们将控制的内容传送到任意的 DOM 中。
  • Supense 等待异步组件时渲染一些额外的内容,让应用有更好的用户体验。

Tree-shaking:支持摇树优化

摇树优化后会将不需要的模块修剪掉,真正需要的模块打到包内。优化后的项目体积只有原来的一半,加载速度更快。

Custom Renderer API: 自定义渲染器

实现 DOM 的方式进行 WebGL 编程。

vue2 和 vue3 的响应式有什么区别?

vue2 的响应式原理:

对象:是通过 Object.defineProperty 对 对象的已有属性值的读取和修改进行劫持。

Object.defineProperty( 
  'data', 'count', { get(){   }, set(){    }
})

存在的问题:对象直接添加新属性或删除已有属性的时候,界面不会自动更新。

数组:是通过重写数组更新数组一系列更新元素的方法,来实现元素修改的劫持。

// 伪代码const originalProto = Array.prototypeconst arrayProto = Object.create(originalProto)

['push','pop','shift','unshift','splice','reverse','sort'].forEach(key=>{
 arrayProto[key] = function(){
  originalProto[key].apply(this.arguments)
  notifyUpdate()
 }
})

存在问题:直接通过下标替换元素或更新length的时候,界面不会自动更新。

针对 vue2 对象和数组的某些更新,界面不能自动更新的问题,vue2 通过 $set 方法,实现视图的实时更新。

vue3的响应式原理:

vue3 响应式是使用 ES6 的 proxyReflect 相互配合实现数据响应式,解决了 vue2 中视图不能自动更新的问题。

proxy 是深度监听,所以可以监听对象和数组内的任意元素,从而可以实现视图实时更新。

参考地址:

  • https://tangjiusheng.com/web/4935.html

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

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

相关文章

MySQL——初窥门径

前言 六一?作为一个大小孩当然是快快乐乐搞技术啦~在这篇文章中,荔枝会梳理SQL语句的基本语法以及MySQL中的函数、约束。多表关系以及查询、事务和事务隔离级别等内容,大致内容归属于MySQL基础知识,荔枝又弄了一篇万字长文哈哈哈哈…

R:GAM非线性回归曲线拟合与散点密度图绘制

作者:CSDN @ _养乐多_ 本文将介绍使用R语言以及GAM模型,绘制回归曲线和散点密度图。 文章目录 一、R语言脚本二、色带一、R语言脚本 install.packages("ggpointdensity") install.packages("ggplot2") insta

IPD发展史

随着IPD(集成产品开发)在IBM、华为等企业取得了巨大的成功,其他行业也开始在相关新产品研发中初步引入IPD的研发管理理念及模式,对IPD在行业的应用进行初步的探索和研究。 为了更好地应用IPD ,不仅要对它的理念和思想理…

浅谈高等学校能源监控管理体系建设

摘要:现代高校担当着人才培养,社会服务和文化传承与创新的光荣使命。高校低碳节能工作是加快建设“和谐社会”、“绿色校园”的重要举措 。当前高校以“数字化能源监测平台”为重心 ,积极推动能源管理的转型 。该文总结高校能源监管平台建设的…

达梦数据库作业调度及警报配置

目录 作业... 4 创建代理环境... 4 1、命令行创建及删除... 4 2、客户端创建及删除... 4 操作员... 5 1、命令行创建及删除... 5 2、客户端创建及删除... 5 作业... 6 一、命令行... 6 1、命令行创建作业... 6 2、命令行修改作业... 7 3、启动或暂停作业... 7 4、…

MATLAB与深度学习:Neural Network Toolbox和Deep Learning Toolbox的使用和模型设计

章节一:引言 在当今人工智能和深度学习的时代,MATLAB作为一种功能强大的科学计算和数据分析工具,在深度学习领域也发挥着重要作用。本文将重点介绍MATLAB中的两个关键工具:Neural Network Toolbox和Deep Learning Toolbox的使用和…

chatgpt赋能python:Python主页的SEO优化

Python主页的SEO优化 Python是一种简单易学、高效灵活的编程语言。其主页Python.org是全球最受欢迎的编程语言之一的官方网站。但是,即使是最著名的网站也需要进行优化,以便在搜索引擎中排名更高。在本文中,我们将探讨如何通过SEO来改进Pyth…

关系型数据库一些概念性的知识点总结

在当今数据驱动的世界中,信息为王。从客户资料到金融交易,每个组织都依赖数据来做出明智的决策并在竞争中保持领先地位。但随着数据量以前所未有的速度增长,管理和分析所有这些信息很快就会变得不堪重负。这就是关系数据库的用武之地。 关系数…

kafka的基础知识及概念

介绍 kafka在过去几年获得了巨大的普及。在微服务架构中,它起着举足轻重的作用。它使数据能够从一项服务转移到另一项服务。我开始这个系列是为了帮助初学者深入了解 Kafka。但是,在我们深入之前,了解一些基础知识很重要。因此,在…

《智能新工厂规划白皮书》:新工厂发展趋势一览

在经济下行压力、人口红利消失、消费结构升级、疫情冲击等多种因素推动下,传统工厂的寒冬已至,必须要变革才能顺应未来的发展趋势。伴随着5G、工业互联网、AI、工业大数据、工业软件等技术或产品的发展融合,许多企业纷纷规划建设智能新工厂&a…

【Web服务器集群】Nginx网站服务

文章目录 一、Nginx 概述1.什么是 Nginx2.Nginx 的特点3.Nginx 应用场景 二、Nginx 服务基础1.编译安装 Nginx 服务1.1 布置环境1.2 安装依赖包1.3 创建运行用户、组1.4 编译安装 2.Nginx 的运行控制2.1 检查配置文件2.2 启动、停止 Nginx2.3 日志分割以及升级 Nginx 服务2.4 添…

Linux - 第18节 - 网络基础(传输层一)

目录 1.传输层 1.1.再谈端口号 1.2.端口号范围划分 1.3.认识知名端口号 1.4.两个问题 1.5.netstat命令 1.6.pidof命令 2.UDP协议 2.1.UDP协议格式 2.2.UDP协议的特点 2.3.面向数据报 2.4.UDP的缓冲区 2.5.UDP使用注意事项 2.6.基于UDP的应用层协议 3.TCP协议 3…

抖音seo源码开发代码分享

抖音seo优化,抖音seo源码开发,抖音排名系统源码开发展示实例: 思路:抖音seo源码,抖音seo矩阵系统底层框架上支持了从ai视频混剪,视频批量原创产出,云存储批量视频制作,账号矩阵&…

如何制作一个连杆组简易四足机器人

1. 运动功能说明 本文示例将实现R296样机连杆组简易四足机器人前进的功能。 2. 电子硬件 在这个示例中,我们采用了以下硬件,请大家参考: 主控板 Basra主控板(兼容Arduino Uno)‍ 扩展板 Bigfish2.1扩展板‍ 电池7.4V锂…

STM32F105RBT6 -- RCC 系统时钟

1. STM32F105RBT6 系统时钟树 2. 使用外部时钟给系统提供时钟HSE,外接一个8Mhz的晶振 3. 系统在启动的时候就会调用系统初始化函数,配置RCC 时钟系统,在调用main函数之前调用SystemInit函数 startup_stm32f10x_hd.s ; Reset handler Reset_…

电脑重装系统 / 系统迁移

1. 台式机太卡了,在网上买了个固态硬盘:250G, Kingston的,把C盘(系统盘)迁移到固态硬盘上去 2. 下载软件 https://www.diskgenius.cn/download.php3. 使用DiskGenius软件,可以方便地将系统从一…

【MySQL】- 04 MVCC 概要

MVCC 概要 事务概念事务的特性:ACID事务的操作隔离性引发的并发问题事务的隔离级别 LBCC&MVCCLBCC记录锁(Record Locks)间隙锁(GAP Locks)临键锁(Next-Key Locks)总结当前读什么是MVCC?什么…

[QT_055]设置QT源码调试(qtc+vs/mingw+msvc)

在开发过程中,我们经常用到调试功能,这样方便查找Bug;Qt是一个开源的框架,可以看到源码。虽然但大部分情况下,我们开发时,只是使用,并没有调试它的源码,但如果想深入了解Qt的一些机制…

对于创业者而言,租赁传统办公室和共享办公室有何不同

租办公室和创业密切相关。创业公司需要一个专业、高效、协作的工作环境来促进业务的开展,提升团队的工作效率和形象。租办公室可以为创业公司提供必要的场所和资源,方便团队成员之间的交流和合作,同时也可以作为公司的品牌形象和实力展示。此…

【IDEA】IntelliJ IDEA的使用 和 配置相关

idea安装后首次使用 新建项目 选择项目框架 下一步: 选择文件夹 隐藏文件不必要显示文件 在setings设置: 设置隐藏页面: 输入后回车 快捷键的配置 1.解决输入法冲突 关闭输入法系统功能快捷键 2.把eclipse的快捷键复用 常用快捷键&#…