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的更多相关文章

  1. Vue3:不常用的Composition API && Fragment、Teleport、Suspense && 与Vue2对比的一些变化

    1 # 一.Vue3不常用的Composition API 2 # 1.shallowReactive与shallowRef 3 .shallowReactive: 只处理对象最外层属性的响应式(浅响 ...

  2. VUE3 之 ref、provide、inject 的使用 - 这个系列的教程通俗易懂,适合新手

    1. 概述 首因效应告诉我们: 在日常交往中,第一印象是非常重要的,好的第一印象能让我们在与人相处时事半功倍. 但也从另一面告诉我们,不能仅凭第一印象去判断一个人,有时虚假的第一印象,也有可能蒙蔽我们 ...

  3. 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# ...

  4. Vue3 Vite3 状态管理 pinia 基本使用、持久化、在路由守卫中的使用

    在<基于 vite 创建 vue3 项目>一文中整合了 pinia,有不少伙伴不知道 pinia 是什么,本文简单介绍 pinia.主要包括三方面: pinia 的基本用法,在<基于 ...

  5. Vue3学习(十)之 页面、菜单、路由的使用

    一.前言 好几天没更文了,周末真的太冷了,在家躺了一天不爱动.今天给暖气了,相对不那么冷了,就可以继续更文了. 由文章标题不难看出,就是实现点击菜单跳转的意思,我写的很直白了,哈哈. 二.实现点击菜单 ...

  6. vue3 的 ref、isRef、toRef、toRefs、toRaw 详细介绍

    ref.isRef.toRef.toRefs.toRaw 看着一堆类似的东西,一个头两个大,今天整理一篇文章详细介绍它们的功能及区别. 1.ref ref 属性除了能够获取元素外,也可以使用 ref ...

  7. newbee-mall 开源商城新计划:秒杀功能、优惠券、对接支付宝

    新项目是 newbee-mall 的升级版本,暂时就叫它 newbee-mall-plus 吧,第一阶段会开发秒杀功能.优惠券.对接支付宝这些功能,也会慢慢加入 Redis. Elastic Sear ...

  8. 简述vue-cli 2.x和vue-cli 3+在项目构建、运行、编译执行时的区别

    码文不易啊,转载请带上本文链接呀,感谢感谢 https://www.cnblogs.com/echoyya/p/14363272.html 关于VUE的项目,有个问题一直不是特别清楚 ,不同公司的项目 ...

  9. 新增秒杀功能、优惠券、支付宝、Docker,newbee-mall升级版开源啦!

    最近是非常非常非常忙,一方面是公司的事情比较多,另外⼀点是最近在准备诉讼材料.⾄于诉讼的是谁,⼤家可以去看我之前写的几篇文章,所以本来这周是不打算更新文章的.不过,昨天慕课网的法务联系我的律师了,终于 ...

  10. vue双向绑定、Proxy、defineproperty

    本文原链接:https://www.jianshu.com/p/2df6dcddb0d7 前言 双向绑定其实已经是一个老掉牙的问题了,只要涉及到MVVM框架就不得不谈的知识点,但它毕竟是Vue的三要素 ...

随机推荐

  1. Pyhton基础部分:6、与用户交互、基础运算符

    目录 一.python数据类型 1.布尔值bool 2.元组tuple 3.集合set 二.与用户交互 1.获取用户输入 2.输出内部信息 3.语言环境差异 三.格式化输入 1.代码实现 2.注意事项 ...

  2. NC-日志配置及代码详解

    目录 一.日志文件输出说明 二.日志配置说明 2.1 配置文件路径 2.2 配置格式 2.2.1 参数说明 三.代码说明 四.自定义日志实例 实例1-新建日志类 实例2-直接在代码中使用日志输出 五. ...

  3. 2022年rhce最新认证—(满分通过)

    RHCE认证 重要配置信息 在考试期间,除了您就坐位置的台式机之外,还将使用多个虚拟系统.您不具有台式机系统的 root 访问权,但具有对虚拟系统的完整 root 访问权. 系统信息 在本考试期间,您 ...

  4. 面试 个人摸底监测 考察考察JS三座⼤⼭ 1. 原型和原型链 2. 作⽤域与闭包 3. 异步和单线程 (第四天)

    01.如何判断⼀个变量是不是数组? let arr = [1,2,3,4] function fun(){ return arr instanceof Array } 02.如何使⽤class实现继承 ...

  5. php 高并发

    1 swoole的博客 http://rango.swoole.com/archives/508 2 消息队列 3 接口并发请求

  6. IDEA提交任务到spark standalone集群

    参考文章: 在idea里面怎么远程提交spark任务到yarn集群 代码 注意setJars,提交的代码,要提前打好包.否则会报找不到类的错误 个人理解就相当于运行的main方法是起了一个spark- ...

  7. form enctype="multipart/form-data" ajax 文件上传

    <form method="post" enctype="multipart/form-data" id="resource"> ...

  8. 【每日一题】【小根堆&边出队边入队后续节点&注意判空】23. 合并K个升序链表-211128/220213

    给你一个链表数组,每个链表都已经按升序排列. 请你将所有链表合并到一个升序链表中,返回合并后的链表. 答案1(参数是数组): /** * Definition for singly-linked li ...

  9. 有状态软件如何在 k8s 上快速扩容甚至自动扩容

    概述 在传统的虚机/物理机环境里, 如果我们想要对一个有状态应用扩容, 我们需要做哪些步骤? 申请虚机/物理机 安装依赖 下载安装包 按规范配置主机名, hosts 配置网络: 包括域名, DNS, ...

  10. Kubernetes(k8s)存储管理之数据卷volumes(二):hostPath数据卷

    目录 一.系统环境 二.前言 三.hostPath数据卷 3.1 hostPath数据卷概览 3.2 创建有hostPath卷的pod 一.系统环境 服务器版本 docker软件版本 Kubernet ...