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

Vue.set 方法原理

function set(target, key, value) {// 判断是否是数组,并且 key 是一个有效的索引值if (Array.isArray(target) && isValidArrayIndex(key)) {target.length = Math.max(target.length, key)target.splice(key, 1, value)return value}// 判断 key 是否已经存在于 target 中if (key in target && !(key in Object.prototype)) {target[key] = valuereturn value}// 获取 target 的响应式对象const ob = target.__ob__// 判断 target 是否是响应式对象if (target._isVue || (ob && ob.vmCount)) {// 非生产环境下发出警告,不能给 Vue 实例或根数据对象添加新的 property// 因为 Vue 实例是代理了根数据对象,并且 Vue.set 无法触发视图更新console.warn('Avoid adding reactive properties to a Vue instance or its root $data ' +'at runtime - declare it upfront in the data option.')return value}// 如果 target 不是响应式对象,直接将 key 和 value 添加到 target 中if (!ob) {target[key] = valuereturn value}// 将 key 添加到 target 中,并将 key 设置为响应式defineReactive(ob.value, key, value)ob.dep.notify()return value
}

上述代码中首先判断了 target 是否是数组,并且 key 是一个有效的索引值,如果满足条件,则使用 splice 方法将 value 添加到 target 中。

接着判断了 key 是否已经存在于 target 中,如果存在,则直接更新 target[key] 的值。

然后判断了 target 是否是 Vue 实例或根数据对象,如果是,则发出警告,不能给 Vue 实例或根数据对象添加新的 property。

最后判断了 target 是否是响应式对象,如果是,则使用 defineReactive 方法将 key 添加到 target 中,并将 key 设置为响应式。

相关文章:

Vue.set 方法原理

function set(target, key, value) {// 判断是否是数组,并且 key 是一个有效的索引值if (Array.isArray(target) && isValidArrayIndex(key)) {target.length Math.max(target.length, key)target.splice(key, 1, value)return value}// 判断 key 是否已经…...

CentOS 7的新特性

CentOS 7在发布时相较于CentOS 6引入了许多重要的变化和优化。以下是一些主要的改进和新特性: 系统初始化程序:CentOS 7使用了systemd作为其初始化系统,取代了之前版本的init系统。systemd提供了更快的启动时间和更好的管理服务。 内核更新&…...

Vue 模板编译原理

Vue 模板编译原理是指将 Vue 的模板转换为渲染函数的过程。在 Vue 中,模板被定义为 HTML 代码片段或者在 .vue 单文件组件中定义。当 Vue 实例化时,会将模板编译为渲染函数,该函数可以根据组件的状态生成虚拟 DOM 并更新视图。 Vue 的模板编…...

ElementUI的Table组件行合并上手指南

ElementUI的Table组件行合并 &#xff0c;示例用官网vue3版的文档 <el-table :data"tableData" :span-method"objectSpanMethod" border style"width: 100%; margin-top: 20px"><el-table-column prop"id" label"ID&qu…...

【ES6】Class继承-super关键字

目录 一、前言二、ES6与ES5继承机制区别三、super作为函数1、构造函数this1&#xff09;、首先要明确this指向①、普通函数②、箭头函数③、注意事项 2&#xff09;、其次要明确new操作符做了哪些事情 2、super()的用法及注意点1&#xff09;、用法2&#xff09;、注意点 四、s…...

做亚马逊测评不知道怎么找客户?这才是亚马逊测评的正确打开方式!

如今的跨境电商内卷严重&#xff0c;花费大量资金做广告推广的效果却微乎其微&#xff0c;这也是亚马逊测评迅速崛起的最根本原因。做亚马逊测评是近年来兴起的一种方式&#xff0c;许多卖家都需要大量的测评来提高自己的产品排名和信誉度。很多兄弟最近来问龙哥亚马逊测评怎么…...

传感器基础:传感器使用与编程使用(三)

目录 常用传感器讲解九--雨滴传感器具体讲解电路连接代码实现 常用传感器讲解十--光传感器根据亮度安排灯具体讲解电路连接代码实现 常用传感器讲解七--light cup&#xff08;KY-008&#xff09;具体讲解电路连接代码实现 常用传感器讲解十二--倾斜开关传感器&#xff08;KY-02…...

深入浅出:分布式、CAP 和 BASE 理论(荣耀典藏版)

大家好&#xff0c;我是月夜枫&#xff0c;一个漂泊江湖多年的 985 非科班程序员&#xff0c;曾混迹于国企、互联网大厂和创业公司的后台开发攻城狮。 在计算机科学领域&#xff0c;分布式系统是一门极具挑战性的研究方向&#xff0c;也是互联网应用中必不可少的优化实践&…...

vue3+elementPlus:el-drawer新增修改弹窗复用

在el-drawer的属性里设置:title属性&#xff0c;和重置函数 //html<!-- 弹窗 --><el-drawerv-model"drawer":title"title":size"505":direction"direction":before-close"handleClose"><el-formlabel-posit…...

使用Docker快速安装grafana

Docker 提供了一个轻量级、易于部署的容器化解决方案&#xff0c;让您能够方便地在不同环境中运行应用程序。以下是在 Docker 中安装 Grafana 的基本步骤&#xff1a; 文章目录 使用Docker快速安装grafana如何使用Grafana步骤 1&#xff1a;连接数据源步骤 2&#xff1a;创建仪…...

excel 函数技巧

1&#xff1a;模糊查询 LOOKUP(1,0/FIND(F1062,Sheet1!C$2:Sheet1!C$9135),Sheet1!B$2:Sheet1!B$9135) 函数含义&#xff1a;寻找F列1062行和sheet1中的C2行到C9135行进行模糊查询&#xff0c;返回该行对应的B2行到B9135行的结果。未查到返回结果0 函数公式&#xff1a; LO…...

Ubuntu安装WordPress并使用Nginx作为Web服务器

在Ubuntu上安装和配置WordPress并使用Nginx作为Web服务器&#xff0c;以下是一个简单的操作流程&#xff1a; 步骤 1: 安装Nginx sudo apt update sudo apt install nginx 启动Nginx并设置开机自启&#xff1a; sudo systemctl start nginx sudo systemctl enable nginx …...

[Linux]Ubuntu noVNC使用

又到了逛大型程序员交友 网站的时间了&#xff0c;今天你准备好了吗。 今天要推荐的一个有趣的项目是noVNC setup好以后是这个样子的&#xff0c;可以在浏览器登陆vnc&#xff0c;不需要再安装一个vnc client. setup的过程比较简单&#xff0c;分为以下几步&#xff1a; 1. v…...

CSRF和SSRF原理、区别、防御方法

CSRF&#xff08;Cross-Site Request Forgery&#xff09;原理&#xff1a;CSRF是一种由攻击者构造形成&#xff0c;由服务端发起请求的一个安全漏洞。它是一种利用用户在已登录的网站中提交非法请求的行为&#xff0c;攻击者通过伪造用户提交的请求&#xff0c;将恶意请求发送…...

如何使用JMeter测试https请求

HTTP与HTTPS略有不同&#xff0c;所以第一次使用JMeter测试https请求时遇到了问题&#xff0c;百度一番后找到解决方法&#xff1a;加载证书。 下面内容主要记录这次操作&#xff0c;便于后续参考&#xff1a; 操作浏览器&#xff1a;谷歌 &#xff08;1&#xff09;下载被测…...

el-table 纵向垂直表头

<template><div class"element-main"><div> Element-ui 官方提供 table Demo</div><el-tableborderstyle"width: 100%":data"tableData"><el-table-column prop"courseName" label"课程信息&qu…...

python/pytorch读取数据集

MNIST数据集 MNIST数据集包含了6万张手写数字&#xff08;[1,28,28]尺寸&#xff09;&#xff0c;以特殊格式存储。本文首先将MNIST数据集另存为png格式&#xff0c;然后再读取png格式图片&#xff0c;开展后续训练 另存为png格式 import torch from torch.utils.data impor…...

IT安全:实时网络安全监控

了解庞大而复杂的网络环境并非易事&#xff0c;它需要持续观察、深入分析&#xff0c;并对任何违规行为做出快速反应。这就是为什么实时网络安全监控工具是任何组织 IT 安全战略的一个重要方面。 网络攻击和合规性法规是 IT 安全的两个主要驱动因素。同时&#xff0c;数据泄露…...

SQL server使用profiler工具跟踪语句

1.打开SQL server工具&#xff0c;在工具点击SQL server Profiler : 2.流程&#xff1a;暂停——清空———点击接口——启用&#xff1a; 3.找到对应的sql语句&#xff0c;复制到查询界面&#xff0c;开始查询数据&#xff1a;...

python实现一维傅里叶变换——冈萨雷斯数字图像处理

原理 傅立叶变换&#xff0c;表示能将满足一定条件的某个函数表示成三角函数&#xff08;正弦和/或余弦函数&#xff09;或者它们的积分的线性组合。在不同的研究领域&#xff0c;傅立叶变换具有多种不同的变体形式&#xff0c;如连续傅立叶变换和离散傅立叶变换。最初傅立叶分…...

7大监控场景+4步部署:Intel PCM性能监控全攻略

7大监控场景4步部署&#xff1a;Intel PCM性能监控全攻略 【免费下载链接】pcm Intel Performance Counter Monitor (Intel PCM) 项目地址: https://gitcode.com/gh_mirrors/pc/pcm Intel Performance Counter Monitor (Intel PCM) 是一款由Intel官方开发的系统性能分析…...

如何通过开源看板工具Kanboard实现团队高效协作

如何通过开源看板工具Kanboard实现团队高效协作 【免费下载链接】kanboard Kanban project management software 项目地址: https://gitcode.com/gh_mirrors/ka/kanboard 在当今快节奏的工作环境中&#xff0c;团队协作效率是项目成功的关键因素。Kanboard作为一款免费开…...

libmill实战教程:构建高性能TCP服务器的10个技巧

libmill实战教程&#xff1a;构建高性能TCP服务器的10个技巧 【免费下载链接】libmill Go-style concurrency in C 项目地址: https://gitcode.com/gh_mirrors/li/libmill libmill是一个在C语言中实现Go风格并发的库&#xff0c;它允许开发者轻松创建高性能的网络应用程…...

Yuzu模拟器版本高效管理实战指南:从新手到专家的避坑技巧

Yuzu模拟器版本高效管理实战指南&#xff1a;从新手到专家的避坑技巧 【免费下载链接】yuzu-downloads 项目地址: https://gitcode.com/GitHub_Trending/yu/yuzu-downloads 你是否曾遇到这样的困境&#xff1a;刚更新的Yuzu模拟器让原本流畅的游戏变得卡顿&#xff0c;…...

【ComfyUI】Qwen-Image-Edit-F2P 实战:基于Transformer架构的人脸图像风格迁移

ComfyUI Qwen-Image-Edit-F2P 实战&#xff1a;基于Transformer架构的人脸图像风格迁移 最近在折腾AI图像生成&#xff0c;发现了一个挺有意思的模型——Qwen-Image-Edit-F2P。它不像那些通用的文生图模型&#xff0c;而是专门针对图像编辑&#xff0c;尤其是在人脸风格迁移上…...

wangEditor 5移动端兼容性深度解析:终极跨平台富文本编辑实战指南

wangEditor 5移动端兼容性深度解析&#xff1a;终极跨平台富文本编辑实战指南 【免费下载链接】wangEditor wangEditor —— 开源 Web 富文本编辑器 项目地址: https://gitcode.com/gh_mirrors/wa/wangEditor 在移动优先的时代&#xff0c;富文本编辑器的移动端兼容性已…...

探索数字微流控:OpenDrop开源平台完全实践

探索数字微流控&#xff1a;OpenDrop开源平台完全实践 【免费下载链接】OpenDrop Open Source Digital Microfluidics Bio Lab 项目地址: https://gitcode.com/gh_mirrors/ope/OpenDrop OpenDrop作为一款基于电润湿技术的开源数字微流控平台&#xff0c;致力于为开源实验…...

# 发散创新:基于事件驱动架构的实时日志监控系统设计与实现在现代分布式系统中,**事件驱动编程模型

发散创新&#xff1a;基于事件驱动架构的实时日志监控系统设计与实现 在现代分布式系统中&#xff0c;事件驱动编程模型正逐渐成为构建高可扩展、高性能应用的核心范式。相比传统的轮询或阻塞式处理方式&#xff0c;事件驱动能够显著降低资源消耗并提升响应效率。本文将深入探讨…...

Pyenv vs Miniconda vs Anaconda:Python环境管理工具链深度解析

1. Python环境管理工具全景概览 刚接触Python开发时&#xff0c;我最头疼的就是环境配置问题。同一个项目在不同电脑上跑出不同结果&#xff0c;安装包时各种依赖报错&#xff0c;这些经历让我深刻认识到环境管理工具的重要性。目前主流的Pyenv、Miniconda和Anaconda就像三种不…...

告别SQL编写!用Dify打造你的专属数据库对话Agent(含提示词优化技巧)

从零构建智能数据库对话Agent&#xff1a;Dify实战与提示词深度优化指南 在数据驱动的决策时代&#xff0c;非技术用户与数据库之间的鸿沟一直是企业效率的隐形瓶颈。传统SQL查询需要专业知识门槛&#xff0c;而Dify平台的出现&#xff0c;让自然语言到SQL的转换变得触手可及。…...