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

《Vue进阶教程》第四课:reactive()函数详解

  往期内容:

《Vue零基础入门教程》合集(完结)

《Vue进阶教程》第一课:什么是组合式API

《Vue进阶教程》第二课:为什么提出组合式API

《Vue进阶教程》第三课:Vue响应式原理

通过前面的学习, 我们了解到reactive可以将一个普通对象转换成响应式对象.

那么, 接下来我们就详细研究一下这个函数.

研究函数主要从这样三个方面

  1. 输入, 也就是参数
  2. 作用, 做了什么
  3. 输出, 也就是返回值
  1. 参数: 只能是引用类型数据, 不能是值类型数据
  2. 作用: 创建传入对象的深层代理, 并返回代理后的对象
  3. 返回值: 一个Proxy代理对象

1) 深层代理

不管传入的对象存在多少层嵌套(对象套对象的情况), 每一层都具有响应性

示例

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Document</title><script src="../node_modules/vue/dist/vue.global.js"></script></head><body><script>const { reactive, effect } = Vueconst pState = reactive({name: 'xiaoming',age: 20,gf: {name: 'xiaomei',city: {name: 'wuhan',},},})effect(() => {console.log(`${pState.name}的女朋友叫${pState.gf.name}, 在${pState.gf.city.name}`)})setTimeout(() => {console.log('过了一段时间, 她去了beijing')// 不管嵌套多少层, 都具有响应性pState.gf.city.name = 'beijing'}, 1000)</script></body>
</html>

2) 重复代理

  1. 对同一个普通对象, 多次代理, 返回的结果唯一
  2. 对代理后的对象再次代理, 返回的结果唯一

以上, 可以理解为单例模式, reactive创建的代理对象只会存在一个

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Document</title><script src="../node_modules/vue/dist/vue.global.js"></script></head><body><script>const { reactive, effect } = Vueconst state = { name: 'xiaoming' }const p1 = reactive(state)const p2 = reactive(state)// 对同一个对象多次代理, 返回的结果唯一console.log(p1 === p2) // trueconst p3 = reactive(p1)// 对代理后的对象, 再次代理, 返回的结果唯一console.log(p3 === p1) // true</script></body>
</html>

3) 局限性

  1. 传入参数只能是对象
  2. 解构或者赋值操作会丢失响应性

示例1

解构赋值后的变量没有响应性

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Document</title><script src="../node_modules/vue/dist/vue.global.js"></script></head><body><div id="app"></div><script>const { reactive, effect } = Vueconst pState = reactive({ name: 'xiaoming' })// 对代理对象进行解构let { name } = pStateeffect(() => {app.innerHTML = pState.name})setTimeout(() => {name = 'xiaomei'console.log('对解构后的name操作, 不会触发响应式')}, 1000)</script></body>
</html>

示例2

赋值操作丢失响应性

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Document</title><script src="../node_modules/vue/dist/vue.global.js"></script></head><body><div id="app"></div><script>const { reactive, effect } = Vuelet todos = reactive([])effect(() => {app.innerHTML = JSON.stringify(todos)})// 模拟向接口请求setTimeout(() => {// 将接口返回的数据赋值给todos, 导致todos丢失了响应性todos = [{ id: 1, content: 'todo-1' },{ id: 2, content: 'todo-2' },]}, 1000)</script></body>
</html>

相关文章:

《Vue进阶教程》第四课:reactive()函数详解

往期内容&#xff1a; 《Vue零基础入门教程》合集&#xff08;完结&#xff09; 《Vue进阶教程》第一课&#xff1a;什么是组合式API 《Vue进阶教程》第二课&#xff1a;为什么提出组合式API 《Vue进阶教程》第三课&#xff1a;Vue响应式原理 通过前面的学习, 我们了解到r…...

【开源】A065—基于SpringBoot的库存管理系统的设计与实现

&#x1f64a;作者简介&#xff1a;在校研究生&#xff0c;拥有计算机专业的研究生开发团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看项目链接获取⬇️&#xff0c;记得注明来意哦~&#x1f339; 赠送计算机毕业设计600个选题ex…...

memmove函数(带图详解)

c语言系列 文章目录 c语言系列一、memmove函数介绍1.1、函数基本功能1.2、函数参数2.3、函数返回值 二、memmove的使用2.1、拷贝字节不可大于目标空间2.2、同一空间拷贝 三、函数功能的模拟实现3.1、函数参数及其返回值的设定3.2、函数体实现 四、代码实现 一、memmove函数介绍…...

【Java数据结构】时间和空间复杂度

本章开始将进入数据结构的知识&#xff0c;时间复杂度主要衡量的是一个算法的运行速度&#xff0c;而空间复杂度主要衡量一个算法所需要的额外空间&#xff0c;。 时间复杂度 算法中执行的次数决定了时间复杂度。 在计算执行次数时&#xff0c;只需要计算大概的次数&#xff…...

八斗深度学习

八斗深度学习第二周笔记 一、深度学习步骤&#xff1a;1. 选定模型结构2. 模型参数随机初始化3. 构造模型损失函数4. 选择优化算法并设置超参数5. 数据准备与预处理6. 训练模型7. 模型评估8. 测试模型9. 应用模型 损失函数极小值、导向意义 超参数的影响迭代次数epoch批次量大小…...

安卓报错Switch Maven repository ‘maven‘....解决办法

例如&#xff1a;Switch Maven repository ‘maven(http://developer.huawei.com/repo/)’ to redirect to a secure protocol 在库链接上方添加配置代码&#xff1a;allowInsecureProtocol true...

Scala编程技巧:正则表达式与隐式转换

1. 引言 在Scala编程中&#xff0c;正则表达式和隐式转换是处理字符串匹配和类型转换的强大工具。本文将通过一个实用的示例——电话号码和身份证号码验证器&#xff0c;来展示如何使用这些工具。 2. 知识概括 2.1 正则表达式基础 正则表达式是用于字符串搜索和匹配的强大工…...

UnityShaderLab 实现黑白着色器效果

实现思路&#xff1a;取屏幕像素的RGB值&#xff0c;将三个通道的值相加&#xff0c;除以一个大于值使颜色值在0-1内&#xff0c;再乘上一个强度值调节黑白强度。 在URP中实现需要开启Opaque Texture ShaderGraph实现&#xff1a; ShaderLab实现&#xff1a; Shader "Bl…...

在Windows 10中使用SSH远程连接服务器(附花生壳操作方法)

SSH 在 linux 中是一种重要的系统组件&#xff0c;用户可以使用 SSH 来远程连接 linux 系统的计算机&#xff0c;或者传输文件。不过在 win10 以前&#xff0c;windows 并不原生支持 SSH&#xff0c;需要借助第三方工具来使用 SSH 功能。而实际上&#xff0c;微软在 2015 年就曾…...

在算网云平台云端在线部署stable diffusion (0基础小白超详细教程)

Stable Diffusion无疑是AIGC领域中的AI绘画利器&#xff0c;具有以下显著优势&#xff1a; 1、开源性质&#xff0c;支持本地部署 2、能够实现对图像生成过程的精确控制 虽然SD在使用上有很多的有点&#xff0c;但缺点也是不言而喻的&#xff0c;由于AI绘画的整个过程以及现…...

ubuntu存储空间不足快速解决

几个自己常用的释放空间命令&#xff0c;备忘 将文件夹下的文件按从大到小排列 ls -lhS /var/log/syslog 过大 sudo truncate -s 0 /var/log/syslog /var/log/Xorg.0.log.old过大 sudo truncate -s 0 /var/log/Xorg.0.log.old 清理系统日志文件&#xff1a; sudo journalctl --…...

Prescan simulink carsim联合仿真平台搭建问题总结

解决办法主要来自忠厚的老王&#xff1a;自动驾驶决策规划算法第二章第一节 决策规划仿真平台搭建_哔哩哔哩_bilibili 这部分直接复制的老王视频的&#xff1a; Q1:prescan安装了&#xff0c;但是找不到Demo_Carsim3D A1:这个文件夹是我自己建立的不是prescan自带的&#xff0…...

STM32(HAL_工程模板的搭建)

目录 一、准备文件 二、创建工程 三、创建分组 四、配置文件处理 五、编译错误处理 一、准备文件 准备HAL库文件: ST官网( 意法半导体-STMicroelectronics )搜索STM32Cube, 本文使用“STM32Cube_FW_F4_V1.24.1” 版本的HAL库, 使用的是F4的库文件。 创建文件&#xff1a…...

Flask入门一(介绍、Flask安装、Flask运行方式及使用、虚拟环境、调试模式、配置文件、路由系统)

文章目录 一、Flask介绍二、Flask创建和运行 1.安装2.快速使用3.Flask小知识4.flask的运行方式 三、Werkzeug介绍四、Jinja2介绍五、Click CLI 介绍六、Flask安装 介绍watchdog使用python–dotenv使用&#xff08;操作环境变量&#xff09; 七、虚拟环境 介绍Mac/linux创建虚拟…...

CAD C# 批量替换当前图中块

本案例功能为选择当前文档中一个块&#xff08;旧块&#xff09;&#xff0c;然后选择新图元&#xff08;新块&#xff09;&#xff0c;运行插件后新块将替换图中所有的旧块。 效果如下&#xff1a; public static class Class1{//选取对象替换块定义[CommandMethod("TT&…...

Android -- [SelfView] 自定义多行歌词滚动显示器

Android – [SelfView] 自定义多行歌词滚动显示器 流畅、丝滑的滚动歌词控件* 1. 背景透明&#xff1b;* 2. 外部可控制进度变化&#xff1b;* 3. 支持屏幕拖动调节进度&#xff08;回调给外部&#xff09;&#xff1b;效果 歌词文件&#xff08;.lrc&#xff09; 一. 使用…...

vscode 配置C/C++环境控制台参数

您可以通过以下步骤在VS Code中配置C/C环境的控制台参数&#xff1a; 1&#xff0c;打开VS Code并进入您的C/C项目 2&#xff0c;点击左侧的"调试"图标&#xff0c;然后点击顶部的齿轮图标&#xff0c;选择“launch.json”。 3&#xff0c;在"launch.json&qu…...

【HarmonyOS学习日志(13)】计算机网络之TCP/IP协议族(二)

文章目录 TCP/IP协议族ARPDNS标志字段&#xff1a;协商具体的通信方式和反馈通信状态DNS查询问题的格式资源记录&#xff08;Resource Record, RR&#xff09;格式&#xff1a;被用于应答字段、授权字段和额外信息字段 IP协议IP服务的特点无状态无连接不可靠 IP头部结构IPv4头部…...

多系统对接的实现方案技术分析

前言 随着信息化和大数据时代的到来&#xff0c;数据资产变得至关重要&#xff0c;企业纷纷上线多种软件系统和移动端应用以适应这一变化。这些系统和应用虽然发挥了各自的优势&#xff0c;但也导致了信息孤岛问题。为了解决这一问题&#xff0c;数据中台和异构系统集成技术应…...

kv类型算子使用

对kv类型的RDD数据集进行操作。 keys """ 获取所有的key转换算子"""inputRdd sc.parallelize([(laoda, 11), (laoer, 22), (laosan, 33), (laosi, 44)]) print(inputRdd.keys().collect()) # [laoda, laoer, laosan, laosi] values "&…...

AsrTools全攻略:革新语音转文字效率的智能解决方案

AsrTools全攻略&#xff1a;革新语音转文字效率的智能解决方案 【免费下载链接】AsrTools ✨ AsrTools: Smart Voice-to-Text Tool | Efficient Batch Processing | User-Friendly Interface | No GPU Required | Supports SRT/TXT Output | Turn your audio into accurate tex…...

vLLM-v0.17.1实操手册:vLLM服务升级策略与滚动更新最佳实践

vLLM-v0.17.1实操手册&#xff1a;vLLM服务升级策略与滚动更新最佳实践 1. vLLM框架概述 vLLM是一个专为大型语言模型(LLM)设计的高性能推理和服务库&#xff0c;最新发布的v0.17.1版本带来了多项性能优化和功能增强。这个开源项目最初由加州大学伯克利分校的研究团队开发&am…...

手指划过屏幕放大模型界面,环氧树脂层和纤维基体在激光路径下呈现出清晰的物理场分布。突然发现这个双层材料烧蚀模型跑得格外顺畅——看来前几天通宵调参没白费

comsol激光清洗、烧蚀双层材料 表面一层50μm厚度的环氧树脂(可更换成其他材料)&#xff0c;基体材料为纤维材料。 添加功率为13W的激光进行清洗或烧蚀 模型非常成功、角度选择很奈斯在COMSOL里建模时有个小细节特别关键&#xff1a;把环氧树脂层的厚度参数设为全局变量。别小看…...

CSMA/CA协议NAV计算实战:用C语言模拟802.11无线网络时序(附完整代码)

CSMA/CA协议NAV计算实战&#xff1a;用C语言模拟802.11无线网络时序&#xff08;附完整代码&#xff09; 在无线网络通信领域&#xff0c;CSMA/CA协议是确保数据传输可靠性的基石。不同于有线网络中的CSMA/CD协议&#xff0c;CSMA/CA通过独特的冲突避免机制解决了无线环境中的隐…...

Phi-3 Forest Laboratory创意图像提示词生成效果:将抽象概念转化为视觉描述

Phi-3 Forest Laboratory创意图像提示词生成效果&#xff1a;将抽象概念转化为视觉描述 你有没有过这样的经历&#xff1f;脑子里冒出一个特别酷的画面&#xff0c;比如“赛博朋克风格的孤独”&#xff0c;或者“初夏清晨的宁静”&#xff0c;感觉特别有味道&#xff0c;但就是…...

【FastAPI 2.0流式AI响应终极指南】:20年架构师亲授异步SSE/Chunked Transfer实战避坑清单

第一章&#xff1a;FastAPI 2.0流式AI响应面试概览在现代AI应用开发中&#xff0c;面试场景下的实时交互体验正成为关键评估维度。FastAPI 2.0 引入了对原生异步流式响应&#xff08;StreamingResponse&#xff09;的深度优化&#xff0c;支持 Server-Sent Events&#xff08;S…...

Cesium使用

Cesium官网&#xff1a;https://cesiumjs.org 官方API文档&#xff1a;https://cesium.com/learn/ion-sdk/ref-doc 中文API文档&#xff1a;https://cesium.xin/cesium/cn/Documentation1.95        https://cesium.xin Cesium中文社区&#xff1a;http://cesiumcn.org …...

打破3D创作壁垒:零成本解决方案实现Blender到Unreal Engine的无缝资产迁移

打破3D创作壁垒&#xff1a;零成本解决方案实现Blender到Unreal Engine的无缝资产迁移 【免费下载链接】bl_datasmith Blender addon to export UE4 Datasmith format 项目地址: https://gitcode.com/gh_mirrors/bl/bl_datasmith 你是否也曾因格式转换丢失过数小时的工作…...

Qt操作Excel避坑指南:为什么我放弃了QAxObject而选择QXlsx?

Qt操作Excel的终极方案&#xff1a;从QAxObject到QXlsx的技术迁移实战 三年前接手一个工业数据采集项目时&#xff0c;我遇到了职业生涯中最棘手的Excel导出问题。客户现场同时安装了Office 2016和WPS&#xff0c;导致基于QAxObject开发的报表模块随机崩溃。更糟的是&#xff0…...

重庆灌浆料销售厂家怎么联系

在重庆的建筑工程领域&#xff0c;灌浆料的应用十分广泛。然而&#xff0c;众多重庆灌浆料厂家的市场状况究竟如何&#xff1f;又存在哪些痛点呢&#xff1f;市场现状&#xff1a;鱼龙混杂目前&#xff0c;重庆灌浆料市场厂家众多&#xff0c;但质量参差不齐。行业权威报告显示…...