Vue 3 第五章:reactive全家桶
文章目录
- 1. reactive
- 1.1. `reactive`函数创建一个响应式对象
- 1.2. 修改`reactive`创建的响应式对象的属性
- 2. readOnly
- 2.1. 使用 `readonly` 函数创建一个只读的响应式对象
- 2.2. 如何修改嵌套在只读响应式对象中的对象?
- 3. shallowReactive
- 3.1. 使用 `shallowReactive` 函数创建一个浅层响应式对象
- 3.2. 如何修改嵌套在浅层响应式对象中的对象?
1. reactive
- 实现
引用类型
数据的响应式,如数组、对象
等 - 上一章说到的
ref
去创建引用类型的响应式,其实内部也是调用了reactive
reactive
创建的响应式对象,调用时不用.value
在Vue3中,
reactive
函数是用于创建响应式对象的函数。它接收一个普通对象作为参数,返回一个代理对象。这个代理对象可以拦截对象的get
和se
t操作,并在其中实现响应式的逻辑。当我们读取代理对象的属性时,会触发依赖收集;当我们修改代理对象的属性时,会触发相应的依赖更新。在调用reactive
函数时,Vue3会使用Proxy
对象对传入的对象进行代理,从而实现响应式的特性。
1.1. reactive
函数创建一个响应式对象
import { reactive } from 'vue'const state = reactive({count: 0,name: 'Tom'
})console.log(state.count) // 输出 0state.count++console.log(state.count) // 输出 1
在这个例子中,我们使用
reactive
函数创建了一个响应式对象state
,它包含两个属性count
和name
。我们可以直接读取和修改state
的属性,不需要使用.value
。当我们读取或修改state
的属性时,会触发相应的依赖更新。
1.2. 修改reactive
创建的响应式对象的属性
import { reactive } from 'vue'const state = reactive({user: {name: 'Tom',age: 18}
})console.log(state.user.name) // 输出 Tomstate.user.name = 'Jerry'console.log(state.user.name) // 输出 Jerry
在这个例子中,我们修改了
state
对象中嵌套的user
对象的name
属性。这个修改会触发相应的依赖更新,从而实现了响应式的特性。
2. readOnly
在 Vue 3 中,可以使用 readonly
函数创建一个只读的响应式对象。它接收一个普通对象作为参数,返回一个只读的代理对象。这个代理对象只能读取属性的值,不能修改属性的值。当我们读取代理对象的属性时,会触发依赖收集;当我们尝试修改代理对象的属性时,会输出警告信息,不会触发相应的依赖更新。在调用 readonly
函数时,Vue 3 会使用 Proxy
对象对传入的对象进行代理,从而实现只读的响应式特性。
2.1. 使用 readonly
函数创建一个只读的响应式对象
import { readonly, reactive } from 'vue'const state = readonly(reactive({count: 0,name: 'Tom'
}))console.log(state.count) // 输出 0state.count++ // 输出警告信息,不会触发依赖更新console.log(state.count) // 输出 0
注意:使用 readonly
函数创建的只读响应式对象是深层只读的。也就是说,当我们尝试修改嵌套在只读响应式对象中的对象时,会输出警告信息,不会触发相应的依赖更新。
2.2. 如何修改嵌套在只读响应式对象中的对象?
- 使用
readOnly
函数创建的只读对象,内部的属性无法修改
import { readonly, reactive } from 'vue'const state = readonly(reactive({user: {name: 'Tom',age: 18}
}))console.log(state.user.name) // 输出 Tomstate.user.name = 'Jerry' // 输出警告信息,不会触发依赖更新console.log(state.user.name) // 输出 Tom
在这个例子中,我们尝试修改只读响应式对象
state
中嵌套的user
对象的name
属性。这个修改会输出警告信息,不会触发相应的依赖更新,从而实现了只读响应式的特性。在实际开发中,readonly
函数是非常有用的一个函数,可以帮助我们创建只读的响应式数据。
3. shallowReactive
- 创建
浅层
的响应式
对象 - 修改内部属性时,
只改变值
,不更新视图
在 Vue 3 中,可以使用
shallowReactive
函数创建一个浅层响应式对象。它接收一个普通对象作为参数,返回一个浅层响应式代理对象。这个代理对象只能处理对象的一级属性,不能处理嵌套在对象中的属性的响应式更新。当我们读取代理对象的属性时,会触发依赖收集;当我们修改代理对象的属性时,会触发相应的依赖更新。在调用shallowReactive
函数时,Vue 3 会使用Proxy
对象对传入的对象进行代理,从而实现浅层响应式特性。
3.1. 使用 shallowReactive
函数创建一个浅层响应式对象
import { shallowReactive } from 'vue'const state = shallowReactive({user: {name: 'Tom',age: 18}
})console.log(state.user.name) // 输出 Tomstate.user.name = 'Jerry'console.log(state.user.name) // 输出 Jerrystate.user = {name: 'Lucy',age: 20
}console.log(state.user.name) // 输出 Lucystate.user.name = 'Lily'console.log(state.user.name) // 输出 Lily
在这个例子中,我们使用
shallowReactive
函数创建了一个浅层响应式对象state
,包含一个属性user
,它是一个普通对象。当我们修改state
的user
属性时,会触发相应的依赖更新;当我们修改user
对象的属性时,不会触发相应的依赖更新。
3.2. 如何修改嵌套在浅层响应式对象中的对象?
- 可以直接修改,但是只更新值,不更新视图
import { shallowReactive } from 'vue'const state = shallowReactive({user: {profile: {name: 'Tom',age: 18}}
})console.log(state.user.profile.name) // 输出 Tomstate.user.profile.name = 'Jerry'console.log(state.user.profile.name) // 输出 Jerry
在这个例子中,我们尝试修改浅层响应式对象
state
中嵌套的user
对象的profile
属性中的name
属性。这个修改不会触发相应的依赖更新,从而实现了浅层响应式的特性。
总结:这篇文章介绍了Vue3中用于创建响应式对象的三个函数:
reactive
、readonly
和shallowReactive
。reactive
函数用于创建深层响应式对象,readonly
函数用于创建深层只读响应式对象,shallowReactive
函数用于创建浅层响应式对象。这些函数可以帮助我们快速创建响应式数据,实现数据的自动更新。
相关文章:
Vue 3 第五章:reactive全家桶
文章目录1. reactive1.1. reactive函数创建一个响应式对象1.2. 修改reactive创建的响应式对象的属性2. readOnly2.1. 使用 readonly 函数创建一个只读的响应式对象2.2. 如何修改嵌套在只读响应式对象中的对象?3. shallowReactive3.1. 使用 shallowReactive 函数创建一个浅层响…...
【联机对战】微信小程序联机游戏开发流程详解
现有一个微信小程序叫中国象棋项目,棋盘类的单机游戏看着有缺少了什么,现在给补上了,加个联机对战的功能,增加了可玩性,对新手来说,实现联机游戏还是有难度的,那要怎么实现的呢,接下…...
优化基于axios接口管理的骚操作
优化基于axios接口管理的骚操作! 本文针对中大型的后台项目的接口模块优化,在不影响项目正常运行的前提下,增量更新。 强化功能 1.接口文件写法简化(接口模块半自动化生成) 2.任务调度、Loading调度(接口层…...
【Django功能开发】如何正确使用定时任务(启动、停止)
系列文章目录 【Django开发入门】ORM的增删改查和批量操作 【Django功能开发】编写自定义manage命令 文章目录系列文章目录前言一、django定时任务二、django-apscheduler基本使用1.安装django-apscheduler2.配置settings.py的INSTALLED_APPS3.通过命令生成定时记录表3.如何创…...
7个好用到爆的音频、配乐素材网站,BGM都在这里了
现在只要有一部手机,人人都能成为视频创作者。一个好的视频不能缺少的就是内容、配乐,越来越注重版权的当下,音效素材使用不当造成侵权的案例层出不穷。为了避免侵权,找素材让很多创作者很头疼。 今天我就整理了7个可以免费下载&…...
JUC(二)
1.可重入锁–ReentrantLock原理 1.1.非公平锁的实现原理 1.1.1.加锁解锁流程 1>.先从构造器开始看,默认为非公平锁,可以在构造函数中设置参数指定公平锁 public ReentrantLock() {sync = new NonfairSync(); }public ReentrantLock...
ATS认证教学
我用的版本是ATS7.11、系统版本是用最新的ios13.2.1 定义 ATS旨在分析通过UART、USB和蓝牙传输传输的iAP流量、通过USB和无线(蓝牙和Wi-Fi)传输的CarPlay流量、通过Wi-Fi传输的AirPlay 2流量以及闪电音频流量。 ATS是Apple’s Accessory Test System的…...
【操作系统】进程管理
进程与线程 1. 进程 进程是资源分配的基本单位 进程控制块 (Process Control Block, PCB) 描述进程的基本信息和运行状态,所谓的创建进程和撤销进程,都是指对 PCB 的操作。 下图显示了 4 个程序创建了 4 个进程,这 4 个进程可以并发地执行…...
一分钟掌握技术术语:API(接口)
很多产品经理在项目开发过程中经常听到:你调我这个接口就好了;这个功能你写个接口给我;有什么不懂的就看下API接口文档。 开发经常说的接口是什么意思呢?术语解释:API(Application Programming Interface&…...
RabbitMQ之交换机
交换机 在上一节中,我们创建了一个工作队列。我们假设的是工作队列背后,每个任务都恰好交付给一个消费者(工作进程)。在这一部分中,我们将做一些完全不同的事情-我们将消息传达给多个消费者。这种模式称为“发布/订阅”. 为了说明这种模式,我们将构建一个简单的日志系统。它…...
Tensorflow深度学习对遥感图像分类,内存不够怎么办?
问题描述在使用Tensorflow-cpu对图像分类的时候,在预读数据过程中,由于数据量过大,内存不足,导致计算失败。使用环境:win10系统 Pycharm tensorflow-cpu2.5.0 CPU: i7 8700 内存64G图1 CPU配置图图2 内存信息图使用数据…...
基础存贮模型介绍
基础存贮模型 这里主要讨论在需求量稳定的情况下,贮存量需要多少的问题。当贮存量过大时,会提高库存成本,也会造成积压资金;当贮存量过小时,会导致一次性订购费用增加,或者不能及时满足需求。 下面讨论不允…...
JNDIExploit使用方法
JNDIExploit 一款用于 JNDI注入 利用的工具,大量参考/引用了 Rogue JNDI 项目的代码,支持直接植入内存shell,并集成了常见的bypass 高版本JDK的方式,适用于与自动化工具配合使用。 对 feihong-cs 大佬的项目https://github.com/fe…...
建议一般人不要全职做副业
欢迎关注勤于奋每天12点准时更新国外LEAD相关技术全职做国外LEAD,听起来不错,但是效果不一定好,没有自控力来全职做,基本要废了自己,最好抽时间来做。我现在就是全职做国外LEAD,外加其他一些项目࿰…...
pytorch入门6--数据分析(pandas)
pandas是基于Numpy构建的,提供了众多比NumPy更高级、更直观的数据处理功能,尤其是它的DataFrame数据结构,可以用处理数据库或电子表格的方式来处理分析数据。 使用Pandas前,需导入以下内容: import numpy as np from …...
淘宝API接口开发系列,详情接口参数说明
onebound.taobao.item_get 公共参数 名称类型必须描述keyString是 调用key(必须以GET方式拼接在URL中) 注册Key和secret: https://o0b.cn/anzexi secretString是调用密钥api_nameString是API接口名称(包括在请求地址中࿰…...
keep-alive
keep-alive 是 Vue 的内置组件,当它包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们。 keep-alive 包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们 使用场景 使用原则:当我们在某些场景下…...
Maven的生命周期及常用命令
文章目录1、Maven生命周期1.1、clean生命周期1.2、default生命周期1.3、site生命周期2、Maven常用命令1、Maven生命周期 Maven有三套生命周期系统: 1、clean生命周期 2、default生命周期 3、site生命周期 三套生命周期之间相互独立,每套生命周期包含一…...
【Java开发】JUC基础 03:线程五大状态和主要方法
1 概念介绍📌 五大状态:new:Thread t new Thread(); 线程对象一旦被创建就进入到了新生状态;就绪状态:当调用start()方法,线程立即进入就绪状态,但不意味着立即调度执行;运行状态&a…...
docker打包容器 在另一个机器上运行
1:将运行中的容器变为镜像docker commit 容器id 镜像名(docker commit 89e81386d35e aabbcc)2:将容器打包成tar包docker save -o xxx.tar 镜像名 (当前路径下会生成一个tar的文件)3:将tar包压缩为gz包tar -…...
2023年全国最新保安员精选真题及答案9
百分百题库提供保安员考试试题、保安职业资格考试预测题、保安员考试真题、保安职业资格证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 91.护卫对象在公共场所参加活动前,保安员需要事先(࿰…...
arduino-sentry2之卡片篇
欧克,今天在学生的强烈要求下 我又重启arduino的sentry2调试篇 目前实验结果,可以检测到10张交通卡片 也就是如图所示十张 具体视频如下: https://live.csdn.net/v/279170 具体代码如下: #include <Arduino.h> #include <...
七、JUC并发工具
文章目录JUC并发工具CountDownLatch应用&源码分析CountDownLatch介绍CountDownLatch应用CountDownLatch源码分析有参构造await方法countDown方法CyclicBarrier应用&源码分析CyclicBarrier介绍CyclicBarrier应用CyclicBarrier源码分析CyclicBarrier的核心属性CyclicBarr…...
C++ string类(二)及深浅拷贝
一、string类方法使用举例1.迭代器迭代器本质:指针(理解)迭代器:正向迭代器: begin() | end() 反向迭代器: rbegin() | rend()2.find使用//找到s中某个字符 void TestString3() {string s("AAADEFNUIE…...
「TCG 规范解读」TCG 软件栈 TSS (上)
可信计算组织(Ttrusted Computing Group,TCG)是一个非盈利的工业标准组织,它的宗旨是加强在相异计算机平台上的计算环境的安全性。TCG于2003年春成立,并采纳了由可信计算平台联盟(the Trusted Computing Platform Alli…...
(二)Markdown编辑器的使用效果 | 以CSDN自带MD编辑器为例
Markdown编辑器使用指南 (一)Markdown编辑器的使用示例 | 以CSDN自带MD编辑器为例(二)Markdown编辑器的使用效果 | 以CSDN自带MD编辑器为例 这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题…...
WebSocket网络通信执行流程
目录WebSocket网络通信执行流程相关概念执行流程WebSocket网络通信执行流程 WebSocket协议:通过单个TCP连接在客户端和服务器之间建立全双工双向通信通道。 WebSocket 对象:提供了用于创建和管理 WebSocket 连接,以及可以通过该连接发送和接…...
【Shell学习笔记】4.Shell 基本运算符
前言 本章介绍Shell的基本运算符。 Shell 基本运算符 Shell 和其他编程语言一样,支持多种运算符,包括: 算数运算符关系运算符布尔运算符字符串运算符文件测试运算符 原生bash不支持简单的数学运算,但是可以通过其他命令来实现…...
无代码资讯 | 《低代码开发平台能力要求》发布;CADP列入Gartner《2022-2024 中型企业技术采用路线图》
栏目导读:无代码资讯栏目从全球视角出发,带您了解无代码相关最新资讯。TOP3 大事件1、《低代码开发平台能力要求》团体标准正式发布近日,中国电子工业标准化协会发布公告(中电标【2022】037 号),由中国电…...
智能家居Homekit系列一智能插座
WiFi智能插座对于新手接触智能家居产品更加友好,不需要额外购买网关设备 很多智能小配件也给我们得生活带来极大的便捷,智能插座就是其中之一,比如外出忘记关空调,可以拿起手机远程关闭。 简单说就是:插座可以连接wi…...
做网站学多长时间可以学会/软文代写公司
好啦,101-200的文章阶段记录开始啦,新的开始,加油! 上一篇文章写到了递归遍历所有文件,提到了压缩包的问题,现在就来介绍一下: python解压缩文件常用shutil模块 直接上代码: 压缩…...
wordpress怎么改图片/app001推广平台官网
LTE作为新一代移动通信技术,能够提供更高的用户速率和更低的时延,提供更丰富的业务。但LTE网络的建设必然存在一个较长的过程,在这个过程中,会存在LTE覆盖小于2G/3G网络的场景,当用户从有LTE覆盖的区域,移动…...
api模式网站开发/企业新闻稿发布平台
如今,企业的经营面临越来越激烈的竞争,如何将数据的价值发挥到最大化,成为众多企业急需解决的问题。如果部署数据分析平台还像以前那样要经历漫长实施过程的话,那么数据化运营将成为空谈。在市场需求的催化下,“自助式…...
沧州地区做网站/外贸业务推广
一、字符串1.字符串的出现计算机发明初期,计算机主要用于做一些科学和工程的计算;而且刚开始计算机都是用来处理数值型的数据,后来引入了字符串的概念,计算机才开始进行非数值型数据的处理(其原理仍然是通过数值来模拟非数值&…...
怎样做下载网站/关键词优化平台有哪些
1、下列函数的时间复杂度是()。 int func ( int n){ int i0, sum0;while(sum< n) sum i;return i;}A、O(log n) B、O(n^1/2) C、O(n) D、O(nlog n) 答案:B 解析: 2、下列关于栈的叙述中,错误的是(&a…...
网站的电子地图怎么做/网络营销优化推广公司
Scala面向对象编程综述 1.Scala是纯粹的面向对象的语言 Scala 是纯粹的面向对象的语言,每个值都是对象,每个操作都是方法调用。 2.Scala大量重用了Java中的类型 Scala 与 Java 完全兼容,Scala 程序会被编译成 Java 字节码,访问 J…...