vue3 | shallowReactive 、shallowRef、triggerRef
shallowReactive
使用 reactive 声明的变量为递归监听,使用 shallowReactive 声明的变量为非递归监听(通俗的讲就是 reactive 创建的对象将会被 vue 内部进行递归监听,可以监听到对象中的对象是否发生了改变从而更新视图,而 shallowReactive 创建的对象只能监听到首层对象的变化)。
<script setup lang="ts">
import { shallowReactive } from 'vue'
const state = shallowReactive({
a: 1,
b: {
res: 2,
c: {
res: 3,
},
},
})
const handleCLick = () => {
state.a = 100
state.b.res = 200
state.b.c.res = 300
}
</script>
<template>
<n-el class="flex flex-col justify-center items-center w-full h-200">
<n-el>{{ state.a }}</n-el>
<n-el>{{ state.b.res }}</n-el>
<n-el>{{ state.b.c.res }}</n-el>
<n-button @click="handleCLick" class="!w-20">点击</n-button>
</n-el>
</template>
shallowRef
其中 shallowRef 为非递归监听,ref 为递归监听,与 shallowReactive 和 reactive 不同的是 shallowRef 和 ref 监听的对象首层是 value 这一层,只有当 value 发生改变时 shallowRef 声明的变量才会在视图上进行更新。
shallowRef只有对 .value 的访问是响应式的。
<n-el>{{ state2.res }}</n-el>
<n-button class="!w-20" @click="handleCLick">点击</n-button>
......
const handleCLick = () => {
// state2.value.res = 9999 //不会触发
}
const handleCLick = () => {
//会触发
state2.value = {
res: 9999,
};
};
<n-el>{{ state2.res }}</n-el>
<n-el>{{ state2.res2.data }}</n-el>
<n-el>{{ state2.res2.res3.data }}</n-el>
<n-button class="!w-20" @click="handleCLick">点击</n-button>
......
const handleCLick = () => {
state2.value = {
res: 100,
res2: {
data: 200,
res3: {
data: 300,
},
},
}
}
triggerRef
triggerRef 的作用则是手动执行与 shallowRef 关联的任何副作用,强制更新视图。
const handleCLick = () => {
state.value.a = 100
state.value.b.res = 200
state.value.b.c.res = 300
state2.value.res = 9999
triggerRef(state2)
}
......
<n-el>{{ state2.res }}</n-el>
<n-el>{{ state2.res2.data }}</n-el>
<n-el>{{ state2.res2.res3.data }}</n-el>
<n-button class="!w-20" @click="handleCLick">点击</n-button>
参考文档:
1、https://www.jianshu.com/p/4e0d4fcff950
2、https://blog.csdn.net/zxBlogs/article/details/114546382
vue3 | shallowReactive 、shallowRef、triggerRef的更多相关文章
- Vue3:不常用的Composition API && Fragment、Teleport、Suspense && 与Vue2对比的一些变化
1 # 一.Vue3不常用的Composition API 2 # 1.shallowReactive与shallowRef 3 .shallowReactive: 只处理对象最外层属性的响应式(浅响 ...
- VUE3 之 ref、provide、inject 的使用 - 这个系列的教程通俗易懂,适合新手
1. 概述 首因效应告诉我们: 在日常交往中,第一印象是非常重要的,好的第一印象能让我们在与人相处时事半功倍. 但也从另一面告诉我们,不能仅凭第一印象去判断一个人,有时虚假的第一印象,也有可能蒙蔽我们 ...
- Vue3.0工程创建 && setup、ref、reactive函数 && Vue3.0响应式实现原理
1 # 一.创建Vue3.0工程 2 # 1.使用vue-cli创建 3 # 官方文档: https://cli.vuejs.org/zh/guide/creating-a-project.html# ...
- Vue3 Vite3 状态管理 pinia 基本使用、持久化、在路由守卫中的使用
在<基于 vite 创建 vue3 项目>一文中整合了 pinia,有不少伙伴不知道 pinia 是什么,本文简单介绍 pinia.主要包括三方面: pinia 的基本用法,在<基于 ...
- Vue3学习(十)之 页面、菜单、路由的使用
一.前言 好几天没更文了,周末真的太冷了,在家躺了一天不爱动.今天给暖气了,相对不那么冷了,就可以继续更文了. 由文章标题不难看出,就是实现点击菜单跳转的意思,我写的很直白了,哈哈. 二.实现点击菜单 ...
- vue3 的 ref、isRef、toRef、toRefs、toRaw 详细介绍
ref.isRef.toRef.toRefs.toRaw 看着一堆类似的东西,一个头两个大,今天整理一篇文章详细介绍它们的功能及区别. 1.ref ref 属性除了能够获取元素外,也可以使用 ref ...
- newbee-mall 开源商城新计划:秒杀功能、优惠券、对接支付宝
新项目是 newbee-mall 的升级版本,暂时就叫它 newbee-mall-plus 吧,第一阶段会开发秒杀功能.优惠券.对接支付宝这些功能,也会慢慢加入 Redis. Elastic Sear ...
- 简述vue-cli 2.x和vue-cli 3+在项目构建、运行、编译执行时的区别
码文不易啊,转载请带上本文链接呀,感谢感谢 https://www.cnblogs.com/echoyya/p/14363272.html 关于VUE的项目,有个问题一直不是特别清楚 ,不同公司的项目 ...
- 新增秒杀功能、优惠券、支付宝、Docker,newbee-mall升级版开源啦!
最近是非常非常非常忙,一方面是公司的事情比较多,另外⼀点是最近在准备诉讼材料.⾄于诉讼的是谁,⼤家可以去看我之前写的几篇文章,所以本来这周是不打算更新文章的.不过,昨天慕课网的法务联系我的律师了,终于 ...
- vue双向绑定、Proxy、defineproperty
本文原链接:https://www.jianshu.com/p/2df6dcddb0d7 前言 双向绑定其实已经是一个老掉牙的问题了,只要涉及到MVVM框架就不得不谈的知识点,但它毕竟是Vue的三要素 ...
随机推荐
- 如何使用webgl(three.js)实现3D储能,3D储能站,3D智慧储能、储能柜的三维可视化解决方案——第十七课
前言 上节课我们讲了<3D光伏发电>,与之配套的就是能量存储 这节课我们主要讲讲储能,储能站,在分布式能源系统中起到调节用对电的尖峰平谷进行削峰填谷的作用.特别是小型储能站,更加灵活,因地 ...
- 达梦-DBLINK数据库链接
aliases: [达梦 DBlink] tags: [数据库,DM,Blog] link: date: 2022-09-06 说明:DM-Oracle指的是在DM中创建链接至Oracle的Dblin ...
- mybatis实现数据行级权限拦截
最近在做一个测试平台,其中有一个需求是用户只能看到他有权限的项目数据.一开始这个需求只针对用例模块,我直接在sql后面加上了关联项目权限表.后面因为其他模块也需要这个权限判断,故打算把关联sql抽取出 ...
- 查看、校验、归档…带你掌握openGauss账本数据库
摘要:账本数据库融合了区块链思想,将用户操作记录至两种历史表中:用户历史表和全局区块表. 本文分享自华为云社区<openGauss账本数据库,你不知道的那些事儿>,作者:Gauss松鼠会 ...
- 【iOS逆向与安全】frida-trace入门
前言 frida-trace是一个用于动态跟踪函数调用的工具.支持android和ios.安装教程请参考官网.工欲善其事必先利其器.本文将以某App为示范,演示frida-trace的各种方法在iOS ...
- [排序算法] 2路插入排序 (C++)
前言 本文章是建立在 插入排序 的基础上写的,如果还有不懂 插入排序 的童鞋先停下脚步,可以先看看这里~ 直接/折半插入排序 2路插入排序解释 在 插入排序 中,当待插入元素需要插入的位置位于当前有序 ...
- MISC中的图片修改宽高问题
在做CTF中MISC分类题目时,很常见的一个问题就是修改图片正确的宽与高 (此篇笔记中的内容以ctfshow中MISC入门分类为切入点,感兴趣的同学可以一边做一边有不会的看看,仅供参考,我是菜鸡) 曾 ...
- JavaScript入门⑥-WEB浏览器API
JavaScript入门系列目录 JavaScript入门①-基础知识筑基 JavaScript入门②-函数(1)基础{浅出} JavaScript入门③-函数(2)原理{深入}执行上下文 JavaS ...
- 为什么 Random.Shared 是线程安全的
在多线程环境中使用 Random 类来生成伪随机数时,很容易出现线程安全问题.例如,当多个线程同时调用 Next 方法时,可能会出现种子被意外修改的情况,导致生成的伪随机数不符合预期. 为了避免这种情 ...
- js 获取当前时间转换时间戳 (毫秒)
js 当前时间转换毫秒数 五种方式 var date = new Date().getTime(); var date = new Date().valueOf(); var date = +ne ...