学习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 } = pData
  person.name = '关羽2'

  // 使用toRefs
  const 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() 创建的代理。返回的是一个布尔值

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

九数分三组

枚举三位数时&#xff0c;不用写三个循环&#xff0c;写出最小和最大数循环就行。在这题里要求三个数中不能有重复的数字&#xff0c;先转换为字符串&#xff0c;再转换为字符数组进行排序&#xff0c;最后比较字符串就可以得出结果。这题把结果和原因调换了一下

Mysql/Redis缓存一致性

如何保证MySQL和Redis的缓存一致。从理论到实战。总结6种来感受一下。 理论知识 不好的方案 1.先写MySQL&#xff0c;再写Redis 图解说明: 这是一幅时序图&#xff0c;描述请求的先后调用顺序&#xff1b; 黄色的线是请求A&#xff0c;黑色的线是请求B&#xff1b; 黄色的…

[Linux][CentOs][Mysql]基于Linux-CentOs7.9系统安装并配置开机自启Mysql-8.0.28数据库

目录 一、准备工作&#xff1a;获取安装包和相应工具 &#xff08;一&#xff09;所需安装包 &#xff08;二&#xff09;安装包下载链接 &#xff08;三&#xff09;在服务器上创建文件夹并上传安装包 二、安装MySql &#xff08;一&#xff09;删除系统自带的mariadb …

到底什么是中台?

1.背景 最近老是听见或看见”中台“的字眼&#xff0c;例如数据中台、业务中台&#xff0c;根本搞不懂是什么&#xff0c;就感觉挺高大尚的。但同时&#xff0c;作为技术人&#xff0c;对于这种可能用到又一无所知的东西&#xff0c;心里是发慌的&#xff0c;因此有了这篇文章。…

unity中实现场景跳转

1&#xff0c;第一步创建2个场景&#xff08;右键资源窗口&#xff0c;名字这里我取的1111和2222&#xff09; 2.添加跳转按钮&#xff08;双击其中一个场景并添加按钮&#xff09; 3.编辑按钮的文字&#xff08;将原本的按钮打开点击里面的text&#xff0c;就可以在右边编辑文…

改进沙猫群优化的BP神经网络ISCSO-BP(时序预测)的Matlab实现

改进沙猫群优化的BP神经网络&#xff08;ISCSO-BP&#xff09;是一种结合了改进的沙猫群优化算法&#xff08;Improved Sand Cat Swarm Optimization, ISCSO&#xff09;和反向传播&#xff08;Back Propagation, BP&#xff09;神经网络的模型&#xff0c;旨在提高时序预测的准…

【大模型API调用初尝试一】智谱AI 通义千问

大模型API调用初尝试一 调用大模型API能干什么智谱AI大模型API调用的过程获取API_KEYGLM_4同步调用GLM_4异步调用文生图大模型API调用 阿里云通义千问API调用过程单轮会话多轮会话 调用大模型API能干什么 大模型的参数非常庞大&#xff0c;功能非常强大&#xff0c;但是训练成…

水肥一体机远程监控解决方案

水肥一体机远程监控解决方案 水肥一体机物联网解决方案&#xff0c;作为现代农业技术的尖端代表&#xff0c;深度融合了物联网、大数据分析以及智能控制等前沿科技手段&#xff0c;为农田灌溉与施肥管理带来了革命性的精准化与智能化升级。该方案的核心理念在于通过实时监测土…

python爬虫实战——小红书

目录 1、博主页面分析 2、在控制台预先获取所有作品页的URL 3、在 Python 中读入该文件并做准备工作 4、处理图文类型作品 5、处理视频类型作品 6、异常访问而被中断的现象 7、完整参考代码 任务&#xff1a;在 win 环境下&#xff0c;利用 Python、webdriver、JavaS…

C/C++链接mysql

下载对应文件 https://dev.mysql.com/downloads/ 选择自己对应的普通进行下载 将下载好的文件上传到机器并解压 tar -zxvf 文件名.tar.gz其中 include 包含所有的方法声明&#xff0c; lib64包含所有的方法实现&#xff08;打包成库&#xff09; 将include文件夹放到/usr/…

zabbix 7.0编译部署教程

zabbix 7.0编译部署教程 2024-03-08 16:50乐维社区 zabbix7.0 alpha版本、beta版本已经陆续发布&#xff0c;Zabbix7.0 LTS版本发布时间也越来越近。据了解&#xff0c;新的版本在性能提升、架构优化等新功能方面有非常亮眼的表现&#xff0c;不少小伙伴对此也已经跃跃欲试。心…

OpenCASCADE开发指南<五>:OCC 内存管理器和异常类

一个软件首先要规定能处理的数据类型&#xff0c; 其次要实现三项最基本的功能——引用管理、内存管理和异常管理。在 OCC 中&#xff0c;这三项功能分别对应基础类中的句柄、内存管理器和异常类。 1 异常类 1. 1 异常类的定义 异常处理机制实现了正常程序逻辑与错误处理的分离…

2024春秋蓝桥杯reverse——crackme01

尝试了下输入没有任何反应 查看——32位——IDA打开 我之前没怎么写过win32&#xff0c;所以我开始在string里面找flag,wrong,right什么的字符&#xff0c;都不行 然后我又在函数里面找main&#xff0c;也什么收获的没有,OK废话完了 在win32里面 关于弹窗的函数&#xff1a;…

移动机器人设计与实践课程进度安排-2023-2024-2

进度安排由人工智能审核制定。 人工智能设计的机器人模型如下&#xff0c;一组三个&#xff1a; 轮式物流小车机器人智慧工厂绘图描述 背景: 绘制一个工厂的大致轮廓&#xff0c;包括工厂大门、围墙和主要的建筑结构。在背景中描绘一些工业设备、生产线和堆放的物料&#xff…

elasticsearch篇

1.初识elasticsearch 1.1.了解ES 1.1.1.elasticsearch的作用 elasticsearch是一款非常强大的开源搜索引擎&#xff0c;具备非常多强大功能&#xff0c;可以帮助我们从海量数据中快速找到需要的内容 例如&#xff1a; 在电商网站搜索商品 在百度搜索答案 在打车软件搜索附近…

两个笔记本如何将一个笔记本作为另一个笔记本的拓展屏

需求是有两个笔记本&#xff0c;一个笔记本闲置&#xff0c;另一个笔记本是主力本。想将另一个闲置的笔记本连接到主力本上作为拓展屏使用。网上搜了好久&#xff0c;有一些人提到了&#xff0c;也有一些视频但是文章比较少。简单总结一下吧 上述需求有两种方式 第一种&#x…

Purple Pi OH鸿蒙开发板7天入门OpenHarmony开源鸿蒙教程【六】

今天我们来从OpenHarmony简介、环境搭建、创建第一个OpenHarmony项目等方面开始OpenHarmony应用开发的第一步。 一. OpenHarmony简介 OpenHarmony 是由开放原子开源基金会&#xff08;OpenAtom Foundation&#xff09;孵化及运营的开源项目,目标是面向全场景、全连接、全智能…

BUGKU-WEB No one knows regex better than me

题目描述 题目截图如下&#xff1a; 进入场景看看&#xff1a; 解题思路 看到此类题目&#xff0c;直接代码审计 相关工具 base64 在线加密https://www.mklab.cn/utils/regex 解题步骤 代码审计 <?php error_reporting(0); # 从请求中获取了两个参数&#xff1…

String 底层是如何实现的?

1、典型回答 String 底层是基于数组实现的&#xff0c;并且数组使用了 final 修饰&#xff0c;不同版本中的数组类型也是不同的&#xff1a; JDK9 之前&#xff08;不含JDK9&#xff09; String 类是使用 char[ ]&#xff08;字符数组&#xff09;实现的但 JDK9 之后&#xf…

短视频解析接口分发系统

宝塔面板&#xff1a;Nginx系统 php7.2 Mysql 5.6-5.7 伪静态Thinkphp 上传文件直接访问域名安装即可 可以自备 听说后边要出saas去水印小程序 下载地址&#xff1a;https://pan.xunlei.com/s/VNskSEelfRVIzoSm5P5Rcw34A1?pwdqzhh# 接口演示&#xff1a; 前端演示…