学习vue3第五节(reactive 及其相关)

1、定义

reactive() 创建一个响应式代理对象,不同于ref()可以创建任意类型的数据,而reactive()只能是对象,会响应式的深层次解包任何属性,将其标注为响应式
响应式是基于ES6的proxy实现的代理对象,该proxy对象与原对象是不相等的;

<script setup>import { reactive, onMounted } from 'vue'const baseObj = {job:'搬砖', love: '象棋'}const person = reactive(baseObj)onMounted(() => {console.log('----', baseObj === person) // false})</script>

2、reactive() 创建对象 数组更新数据时;

a、创建的是对象时,
若将对象全部赋值,会导致数据变了,而页面没有更新,因为全部赋值破坏了代理指向,从而导致不是原来使用reactive()创建的对象了;需要一个一个属性的赋值;

<script setup>
import { reactive } from 'vue'let person = reactive({job: '躺平',love: '跑步'})let per2 = reactive({job: '搬砖',love: '跑步'})const handleChangeJOb = () => {person = {}console.log('===', person) // {} ;值更新了,但是视图却没有更新per2.job = per2.job + '&' // '搬砖&' 值更新了,视图同样更新// 这样清空数据,才会让界面跟着同步更新// Object.keys(per2).forEach(itm => {//   per2[itm] = ''// })// console.log('=22=per2==', per2)}
</script>

b、操作数组时,
直接给响应式数组 赋值为空数组[],页面不会更新,需要将数组的length赋值为0才可以更新视图;此处与vue2中刚好相反

<script setup>let myArr = reactive([{ name: '张三', age: '26' },{name: '李四', age: '18'}])const handleChangeArr = () => {// myArr = [] // 页面视图不更新,得到的是普通数组对象,// console.log('==myArr=', myArr) myArr.length = 0 // 页面会同步更新,得到的是proxy代理对象console.log('==myArr=', myArr)myArr.push({ name: '马六', age: '16'})// 使用原生数组方法,进行数据操作时,同样可以更新视图,// 相比较vue2 中只重写了7中数组方法,要方便的多}
</script>

3、reactive() 使用时注意事项

<script setup>// 尽量扁平化,避免多层嵌套let per1 = reactive({data: {name: '王五'}})// 建议如下:let perData = reactive({name: '王五'})// 若定义的对象有多层嵌套,需要使用ref 或者 toRefs 来保持响应式let pData = reactive({person: {name: '马超',job: '大将军'},})// 以下均可可以更新视图pData.person = {name: '关羽', job: '上将军'} pData.person.name = '关羽' const { person } = pDataperson.name = '关羽2'// 使用toRefsconst personRef = toRefs(pData)console.log('=00==personRef==', personRef) // 视图更新数据变化

console.log(‘=00personRef’, personRef) 出来的是 为 ObjectRefImpl 对象
截图:
在这里插入图片描述

4、shallowReactive() 创建浅层的响应式

,这里没有深层级的转换:一个浅层响应式对象里只有根级别的属性是响应式的。属性的值会被原样存储和暴露,这也意味着值为 ref 的属性不会被自动解包了。即第一级是响应式的,之后的属性是非响应式的

<script setup>import { shallowReactive } from 'vue'let personO = shallowReactive({name: 'Andy',others: {like: '躺平'}})const handleChangePerson = () => {// personO.name = 'Andy 3号' // 是响应式的,界面视图会更新personO.others.like = '梦想在哪里' // 非响应式的,界面不会更新console.log('====', isReactive(personO.others)) // false
}</script>

5、isReactive() 是用于 检查一个对象是否是由 reactive() 或 shallowReactive() 创建的代理。返回的是一个布尔值

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

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

相关文章

Android FrameWork基础之Makefile

Makefile入门教程&#xff08;结合Android源码编译用例&#xff09; 一、引言 Makefile是用于自动化构建项目的工具&#xff0c;尤其在Android源码编译中扮演着至关重要的角色。Makefile文件包含了构建过程中所需的各种规则、依赖关系和命令。通过Makefile&#xff0c;我们可…

单片机第四季-第一课:RTOS

1&#xff0c;RTOS来龙去脉 操作系统是什么&#xff1f; 以人类社会类比&#xff0c;小公司三四个人都是干活的&#xff0c;大公司有几万人其中有几千人从事管理工作&#xff0c;他们的工作是让其他人的干活效率更高。 51单片机为什么没有操作系统&#xff0c;因为51的性能太…

人脸检测的5种实现方法

众所周知&#xff0c;人脸识别是计算机视觉应用的一个重大领域&#xff0c;在学习人脸识别之前&#xff0c;我们先来简单学习下人脸检测的几种用法。 常见的人脸检测方法大致有5种&#xff0c;Haar、Hog、CNN、SSD、MTCNN&#xff1a; 相关构造检测器的文件&#xff1a;opencv…

服务器机器学习环境搭建(包括AanConda的安装和Pytorch的安装)

服务器机器学习环境搭建 1 服务器与用户 在学校中&#xff0c;我们在学校中是以用户的身份进行访问学校的服务器的。整体框架大致如下&#xff1a; 我们与root用户共享服务器的一些资源&#xff0c;比如显卡驱动&#xff0c;Cuda以及一些其他的公共软件。 一般情况下&#…

力扣新思路题:字符串轮转

非常简单的思路&#xff1a;将两个字符串s1接起来&#xff0c;并判断s2字符串是否是加长版s1字符串的子串 bool isFlipedString(char* s1, char* s2){if (strlen(s1) ! strlen(s2)) {return false;}int len strlen(s1);int i 0;char* arr (char*)malloc(sizeof(char) * len…

Netty之@Sharable注解

1.背景 熟悉Netty的人都了解&#xff0c;netty为每个连接的客户端都会创建一个channel用于通信相关。每个channel都绑定到一条channelpipeline上。而channelpipeline里由一个一个的节点channelhandler组成&#xff08;严格来说是channelhandlercontext&#xff09;。如果为所有…

数据库案例学习20240316-mysql数据库异常处理分析优化过程指南2

一、简介 在开始排错Update之前&#xff0c;我们需要知道 Update 在 MySQL 中的生命周期是什么&#xff0c;MySQL 如何执行一个事务的。理解了如何执行&#xff0c;才知道如何去排查故障。 二、Update 生命周期 Server 层阶段 2.1 连接器 客户端发起一个 TCP 请求后&#xf…

(四)PySpark3:Mlib机器学习实战-信用卡交易数据异常检测

目录 一、Spark Mlib 二、案例背景以及数据集 三、代码 四、总结 PySpark系列文章&#xff1a; &#xff08;一&#xff09;PySpark3&#xff1a;安装教程及RDD编程 &#xff08;二&#xff09;PySpark3&#xff1a;SparkSQL编程 &#xff08;三&#xff09;PySpark3&am…

比特币,区块链及相关概念简介(一)

目录 什么是比特币比特币用来交易什么呢应用场景和黄金的关系相似之处&#xff1a;不同之处&#xff1a; 如果是交易才会有比特币奖励 那第一个持有者是怎么获取的呢 又是怎么交易的呢其他加密货币 以下内容结合了chatgpt 3.5以及网络文章。 用于学习记录。 简介&#xff1a; 介…

C++ filesystem库介绍

filesystem 库源自 boost.filesystem 库,在 C++17 中被合并进 C++ 标准库中。filesystem 库它提供了一组用于处理文件系统操作的类和函数。该库为处理文件、目录和路径提供了简单而强大的接口,使得文件系统操作变得更加方便和可移植。 下面是 <filesystem> 库中一些主…

【蓝桥杯选拔赛真题38】C++判断数字 第十四届蓝桥杯青少年创意编程大赛 算法思维 C++编程选拔赛真题解析

目录 C判断数字 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、推荐资料 C判断数字 第十四届蓝桥杯青少年创意编程大赛C选拔赛真题 一、题目要求 1、编程实现 给定一个正整数N(100≤N<100000)…

nginx实时流量拷贝ngx_http_mirror_module

参考&#xff1a; Module ngx_http_mirror_module Nginx流量拷贝ngx_http_mirror_module模块使用方法详解 ngx_http_mirror_module用于实时流量拷贝 请求一个接口&#xff0c;想实时拷贝这个请求转发到自己的服务上&#xff0c;可以使用ngx_http_mirror_module模块。 官网好像…

(done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW

一个视频&#xff1a;https://www.bilibili.com/video/BV1mb4y1y7EB/?spm_id_from333.337.search-card.all.click&vd_source7a1a0bc74158c6993c7355c5490fc600 这里有个视频&#xff0c;讲解得更加生动形象一些 总得来说&#xff0c;词袋模型(Bow, bag-of-words) 是最简…

SpringBoot之yml与properties配置文件格式的区别

概念: SpringBoot支持两种格式的配置文件,一种是yml,而另一种就是properties,默认的文件名为application.yml或者.properties 为什么有了properties之后还要有yml呢? 因为properties配置文件存在数据冗余性,在properties配置文件中一切配置都需要从头写到为, 并且Key不能重复,…

PHP+golang开源办公系统CRM管理系统

基于ThinkPHP6 Layui MySQL的企业办公系统。集成系统设置、人事管理、消息管理、审批管理、日常办公、客户管理、合同管理、项目管理、财务管理、电销接口集成、在线签章等模块。系统简约&#xff0c;易于功能扩展&#xff0c;方便二次开发。 服务器运行环境要求 PHP > 7.…

手搭手RocketMQ发送消息

消息中间件的对比 消息中间件 ActiveMQ RabbitMQ RocketMQ kafka 开发语言 java erlang java scala 单击吞吐量 万级 万级 10万级 10万级 时效性 ms us ms ms 可用性 高(主从架构) 高(主从架构) 非常高(主从架构) 非常高(主从架构) 消息中间件: acti…

LabVIEW湍流等离子体束热效率优化

LabVIEW湍流等离子体束热效率优化 利用LabVIEW虚拟仪器技术&#xff0c;对湍流等离子体束的热效率进行了实时监测与优化&#xff0c;提高其在材料处理领域的应用效率和精度。通过双进气湍流等离子体发生器&#xff0c;实现了在不同工作参数下对热效率的实时在线监测&#xff0…

这是二叉搜索树吗?

一棵二叉搜索树可被递归地定义为具有下列性质的二叉树&#xff1a;对于任一结点&#xff0c; 其左子树中所有结点的键值小于该结点的键值&#xff1b;其右子树中所有结点的键值大于等于该结点的键值&#xff1b;其左右子树都是二叉搜索树。 所谓二叉搜索树的“镜像”&#xf…

Linux|centos7|postgresql数据库|yum和编译方式安装总结(全系版本)

一、 yum方式安装postgresql 这个是官方的yum源&#xff0c;包括postgresql的开发包&#xff0c;lib库什么的&#xff0c;很齐全&#xff0c;关键是包括pgbackrest yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-la…

Luckysheet + Exceljs:H5实现Excel在线编辑、导入、导出及上传服务器的示例代码(完整版demo)

创建xeditor.html <!DOCTYPE html> <html><head><meta charset"UTF-8" /><title>Hello World!</title><!-- <link relstylesheet href./luckysheet/plugins/css/pluginsCss.css /><link relstylesheet href./luck…