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

Vue3:shallowRef与shallowReactive

目录

一.shallowRef 和 shallowReactive

1.shallowRef

2.shallowReactive

二.ref 和 reactive

1. ref 

 2. reactive

三.各自使用场景

1.shallowRef

2.shallowReactive

3.ref

4.reactive

四.shallowRef 使用

五.shallowReactive使用

六.效果


一.shallowRefshallowReactive

1.shallowRef

用于创建一个基本类型的响应式引用。它只对该引用本身进行响应式处理,不会深入到引用所指向的对象内部。这意味着如果引用的值是一个对象或数组,那么这个对象或数组内部的变化将不会触发视图更新。

2.shallowReactive

用于创建一个对象的响应式包装。与reactive类似,但它只会使对象的第一层属性变为响应式,而不会递归地使所有嵌套属性变为响应式。这可以减少不必要的性能开销,特别是在处理大型对象时。

二.refreactive

1. ref 

用于创建一个响应式引用,它可以用于任何类型的值(包括对象、数组等)。当引用的值发生变化时,会触发视图的更新。

 2. reactive

用于创建一个对象的响应式包装,它会递归地使所有嵌套属性变为响应式。这使得对嵌套属性的任何更改都会触发视图的更新。

三.各自使用场景

1.shallowRef

当你需要创建一个基本类型的响应式引用,并且希望避免深度监听时,可以使用 shallowRef。例如,如果你有一个布尔值或数字作为状态,并且不希望这些值的变化导致整个对象被重新渲染,可以使用 shallowRef

2.shallowReactive

当你需要创建一个对象的响应式包装,但只关心第一层属性的变化,并且希望减少性能开销时,可以使用 shallowReactive。例如,如果你有一个包含大量嵌套属性的大型对象,但只需要监视顶层属性的变化,可以使用 shallowReactive

3.ref

当你需要创建一个可以包含任何类型值的响应式引用时,可以使用 ref。例如,如果你有一个复杂的对象或数组作为状态,并且希望对其整体进行响应式处理,可以使用 ref

4.reactive

当你需要创建一个对象的完全响应式包装,并希望所有嵌套属性的变化都能触发视图更新时,可以使用 reactive。例如,如果你有一个包含多个嵌套属性的对象,并且希望每个属性的变化都能引起视图的更新,可以使用 reactive

四.shallowRef 使用

求和与修改整个人可成功修改

修改名字无法成功修改

五.shallowReactive使用

修改汽车品牌可成功修改

修改汽车颜色和引擎无法成功修改

六.代码

<template><h2>求和为:{{ sum }}</h2><h2>名字为: {{ person.name }}</h2><h2>年龄为:{{ person.age }}</h2><button @click="ChangeSum">求和加一</button><button @click="ChangeName">修改名字</button><button @click="ChangePerson">修改整个人</button><span></span><h2>汽车品牌: {{ car.brand }}</h2><h2>汽车颜色:{{ car.options.color }}</h2><h2>汽车引擎:{{ car.options.engine }}</h2><button @click="ChangeBrand">修改汽车品牌</button><button @click="ChangeColor">修改汽车颜色</button><button @click="ChangeEngine">修改引擎</button></template><script lang="ts" setup name="App">
import { options } from 'node_modules/axios/index.cjs';
import { ref , reactive, shallowRef , shallowReactive} from 'vue';let car = shallowReactive({brand:'宝马',options:{color:'红色',engine:'V6',}})function ChangeBrand(){car.brand = '奔驰'}function ChangeColor(){car.options.color = '白色'}function ChangeEngine(){car.options.engine = 'V16'}let sum = shallowRef(0)let person = shallowRef({name:'小明',age:18})function ChangeSum(){sum.value += 1}function ChangeName(){person.value.name = '小红'}function ChangePerson(){person.value = {name:'小兰',age:28}}</script><style>
button{width: 150;height: 40;
}</style>

六.效果

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • JS手写Promise以及promise.all方法
  • 【算法】贪心+堆排序实现大根堆及标准库容器类的融合使用
  • 车载网络测试实操源码_使用CAPL脚本实现安全访问解锁,并模拟各种测试场景
  • C语言中易混淆概念的关键字
  • Qt/C++ 多线程同步机制详解及应用
  • redis 十大应用场景
  • 特种作业管理系统 —— 企业安全与效率的卓越保障
  • EfficientViT(2023CVPR):具有级联组注意力的内存高效视觉Transformer!
  • 8. 详细描述一条 SQL 语句在 MySQL 中的执行过程。
  • jQuery国内大厂CDN加速链接
  • 本地生活商城开发搭建 同城O2O线上线下推广
  • 【SpringBoot整合Redis测试Redis集群案例】
  • 一、Kafka入门
  • Cursor免费 GPT-4 IDE 工具的保姆级使用教程
  • windows GetUserNameEx api使用c++
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • axios 和 cookie 的那些事
  • crontab执行失败的多种原因
  • iOS编译提示和导航提示
  • Java方法详解
  • js面向对象
  • maven工程打包jar以及java jar命令的classpath使用
  • nfs客户端进程变D,延伸linux的lock
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • redis学习笔记(三):列表、集合、有序集合
  • RxJS: 简单入门
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • vue2.0项目引入element-ui
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 一些css基础学习笔记
  • 优化 Vue 项目编译文件大小
  • 正则学习笔记
  • 字符串匹配基础上
  • 阿里云API、SDK和CLI应用实践方案
  • 阿里云服务器购买完整流程
  • 带你开发类似Pokemon Go的AR游戏
  • 正则表达式-基础知识Review
  • ‌内网穿透技术‌总结
  • # 利刃出鞘_Tomcat 核心原理解析(七)
  • #QT(串口助手-界面)
  • $NOIp2018$劝退记
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (2024最新)CentOS 7上在线安装MySQL 5.7|喂饭级教程
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (转)linux下的时间函数使用
  • (转)Mysql的优化设置
  • .net 4.0发布后不能正常显示图片问题
  • .NET MVC 验证码
  • .net refrector
  • .Net多线程Threading相关详解
  • .Net下的签名与混淆
  • /dev下添加设备节点的方法步骤(通过device_create)