当前位置:首页 > 技术分析 > 正文内容

3个 Vue $set 的应用场景

ruisui883个月前 (03-23)技术分析27

大家好,我是大澈!一个喜欢结交朋友、喜欢编程技术和科技前沿的老程序员,关注我,科技未来或许我能帮到你!

在 Vue2 中,由于 Object.defineProperty 的限制,Vue 无法检测到对象属性的直接新增或删除,以及数组索引的直接新增。

为了让 Vue 监听新增属性的变化,Vue 提供了 Vue.set 方法(或 this.$set)。

原理流程大体如图:

下面一起对 $set 的原理进行拆解。

一、传入非Object

如果传入是 undefined、null 或是 基本类型,则直接抛出错误。

二、传入数组

如果传入是一个数组,就会调用数组的 splice 方法进行实现响应式。

Vue 重写了数组的原生方法(如 push、pop、shift、unshift、splice、sort 和 reverse),这些方法在调用时会自动触发依赖更新,因此通过这些方法修改数组是响应式的。

三、传入对象

如果传入是一个对象,先判断当前 key 在 vm 是否存在,如果存在,说明当前 key 已经是响应式的,就直接进行操作对应的动作。

如果 key 不在 vm 中,就调用 Object.defineReactive 方法将该 key 添加到 vm 上,此时该 key 就有了 getter 和 setter 。最后调用该 key 的 setter 触发通知,走响应式数据更新那一套流程。

当然,Vue 3 不再需要 Vue.set,因为 Proxy 可以自动监听属性的新增和删除!

好了,今天要分享的内容就是这么多,联系和更多内容在绿色App搜【程序员大澈】,最后感谢朋友们给个点赞、分享、推荐,拜拜~

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/2946.html

分享给朋友:

“3个 Vue $set 的应用场景” 的相关文章

7种超轻量级的Linux发行版,能够帮助你找到适合自己的操作系统

Linux是一种非常受欢迎的开源操作系统,而且有许多版本可以选择。有时候,你需要一种超轻量级的Linux发行版,它可以在资源有限的设备上运行,并且能够快速启动。本文将介绍7种超轻量级的Linux发行版,希望能够帮助你找到适合自己的操作系统。1. Tiny Core LinuxTiny Core Li...

手把手教你Vue之父子组件间通信实践讲解【props、$ref 、$emit】

组件是 vue.js 最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引用。那么组件间如何通信,也就成为了vue中重点知识了。这篇文章将会通过props、$ref和 $emit 这几个知识点,来讲解如何实现父子组件间通信。转载链接:https://www.jia...

前后端分离自动化运维平台开发

运维平台采用前后端分离:前端vue,框架vue-element-admin;后端python,框架django-rest-framework.目前运维平台模块如下:1、 CMDB管理应用管理、环境管理、开发语言管理、产品项目管理、资产管理2、 构建发布持续构建、持续部署、Jar工程依赖构建3、 容器...

neovim 0.9在win下配置 python开发环境

初级的一些配置点击下面链接查看neovim安装插件管理器neovim常用快捷键neovim python开发环境简易配置方法 (需要手动键入命令行 运行python)安装neovim python的模块pip install pynvim pip install jedi pip install n...

HTML5学习笔记三:HTML5语法规则

1.标签要小写2.属性值可加可不加””或”3.可以省略某些标签 html body head tbody4.可以省略某些结束标签 tr td li例:显示效果:5.单标签不用加结束标签img input6.废除的标签font center big7.新添加的标签将在下一HTML5学习笔记中重点阐述。...

Acustica Audio 发布模拟Roland Jupiter 双声道合成器插件 TH2

福利: Acustica Audio 发布模拟Roland Jupiter 风格的双声道合成器插件 TH2 免费下载 意大利 Acustica Audio 公司发布布模拟Roland Jupiter 风格的双声道合成器插件 TH2 ,灵感来源于Acustica Audio的THING-8系列,它是...