学习vue3第四节(ref以及ref相关api)
主要记录以下api:ref()、isRef()、unref()、 shallowRef()、triggerRef()、customRef()
1、ref() 定义
接受一个内部值,返回一个响应式的、可更改的 ref 对象,此对象只有一个指向其内部值的属性 .value,.value属性用于追踪并且存储响应式数据的值(包括对象),当响应式对象变化时会自动追踪更新视图;
如果将一个对象类型赋值给 ref(),那么这个对象将通过 reactive() 转为具有深层次响应式的对象。这也意味着如果对象中包含了嵌套的 ref,它们将被深层地解包
如图:
2、ref使用
ref() 接收的数据,在js中使用需要.value作为唯一的键引用,而在模板中使用只需要直接使用即可,不需要再.value,因vue模板会自动解析ref类型数据;
如图:
<template>年龄:{{ age }}<br>姓名:{{ name }}
</template>
<script setup>import { ref, reactive, computed, onMounted, onActivated, unref } from 'vue'const age = ref(0)const name = ref('Andy')onMounted(() => {console.log('==age==', age.value)console.log('==name==', name.value)})
</script>
3、ref() 接收对象类型时
ref() 接收的对象类型若要里面的属性保持响应式,需要使用.value的方式进行单个属性赋值,如果将声明对象整体赋值,则会导致响应式失效,如:unNormalMan
unNormalMan{{ JSON.stringify(unNormalMan) }}<br><button @click="handleChangeNormal">unNormalMan</button>// 声明为响应式对象
let unNormalMan = ref({job: '不知道',love: '猜猜'
})
// 整体赋值后变成普通对象,视图不会更新
const handleChangeNormal = () => {unNormalMan = {a: '111',b: '222'}console.log('=handleChangeNormal==unNomalMan', unNormalMan)console.log('=change=unRef', unref(unNormalMan))
}
// .value 形式单个赋值可以保持响应式
const person = ref({job: '搬砖',love: '象棋'
})const handleChangeJOb = () => {person.value.job = person.value.job + '$'const { job } = person.valueconsole.log('===job=', job) // 搬砖$ 同样页面视图也会更新
}
4、ref() 优缺点
响应式数据:ref函数可以让我们轻松地创建响应式数据,无需使用Vue2中的data选项或this关键字。
支持所有类型:与Vue2的data选项不同,ref函数可以用于创建任何类型的响应式数据,包括对象和数组。
逻辑复用灵活:通过使用ref函数,我们可以更容易地在不同的组件和逻辑块之间共享和复用状态。
注意:
使用 ref 函数创建的响应式数据,在修改值时,必须通过 .value 属性来访问和修改。
ref 函数返回的响应式引用对象是不可变的,即你不能将新的值赋给整个引用对象,而只能通过 .value 属性来修改内部的值。
ref 函数可以用于创建任何类型的响应式数据,包括基本类型、对象、数组等。
5、ref其他属性 isRef unRef shallowRef triggerRef customRef ,toRef toRefs 下节结合reactive 介绍
5.1、isRef() 判断一个对象或者值是否为ref类型,返回一个布尔值
const personMen = ref('优秀的')
console.log(isRef(personMen)) // true
const norefObj = {a:'333'}
console.log(isRef(norefObj)) // false
5.2、unref() 传入的对象如果是ref() 值或对象,则会返回 person.vue d的代理对象proxy;相反,如果是普通的对象或值,则会原样返回
如图:
let unNormalMan = ref({job: '不知道',love: '猜猜'
})
console.log('=000=unRef', unref(unNormalMan))
// Proxy:{...}const per = '测试'
console.log(unref(per)) // 测试
5.3、shallowRef()
浅层的响应式声明,只针对.value进行响应式,而不会进行深层次的递归,即.value.xxx 不是响应式的,主要针对的是复杂类型的数据结构,
如:
const pet = shallowRef({job: '专业搬砖'
})pet.value = { job: '躺平梦想'} // 会触发视图更新,响应式的
pet.value.job = '响应不了' // 不是响应式的,
5.4、triggerRef
强制触发依赖于浅层的Ref副作用,triggerRef() 会使浅层的响应式突变为深层的响应式,强制更新视图,比如使用shallowRef 处理的对象,响应式只能是浅层的,如果想要值更改时候也发生变化,则需要如下
const perObj = shallowRef({job: '测试'
})const handleChangePerObj = () => {perObj.value.job = '搬砖的'triggerRef(perObj) // 这样在模板中使用的 {{ perObj.job }} 会更新为 “搬砖的”,如果不使用 triggerRef() 则不会更新视图
}
5.5、customRef
创建一个工厂函数,显示的声明对其依赖追踪触发的控制条件;
即:创建的工厂函数中返回 set() get() 方法对象,通过set()自主控制触发时机,比如防抖
防抖代码:
import { customRef } from 'vue'export function useDebouncedRef(value, delay = 500) {let timeoutreturn customRef((track, trigger) => {return {get() {track()return value},set(newValue) {clearTimeout(timeout)timeout = setTimeout(() => {value = newValuetrigger()}, delay)}}})
}
// 使用如下:
<script setup>
import { useDebouncedRef } from './debouncedRef'
const myRefVal = useDebouncedRef('测试防抖')
</script><template><input v-model="myRefVal" />
</template>
相关文章:

学习vue3第四节(ref以及ref相关api)
主要记录以下api:ref()、isRef()、unref()、 shallowRef()、triggerRef()、customRef() 1、ref() 定义 接受一个内部值,返回一个响应式的、可更改的 ref 对象,此对象只有一个指向其内部值的属性 .value,.value属性用于追踪并且存…...

关于电脑无法开启5G频段热点的解决方案
tips:本文是本着解决校园网开热点后限速的问题的目的,具体情况具体对待。 1.找到设备管理器 右键该选项 2.在新弹出窗口选择首选频带 3.选择首选5GHz频带 确定之后重新连接wifi,重新开启热点,大功告成。 后记:在使用2.4ghz开热点…...

清理磁盘空间 - Win系统
清理磁盘空间 - Win系统 前言系统方案TreeSize FreeSpaceSniffer 前言 我们在使用电脑时经常会出现硬盘空间不足的情况,下文介绍如何清理磁盘空间,包含系统方案、TreeSize Free和SpaceSniffer。清理Window更新等系统文件推荐使用系统方案,清…...
科技革新的引擎-2024年AI辅助研发趋势
随着科技的飞速发展,人工智能(AI)已经在许多领域展现出了其强大的潜力和价值。特别是在研发领域,AI的辅助作用日益凸显,成为推动科技革新的重要引擎。在2024年,这种趋势将更加明显,我们可以从以…...
【PTA】L1-021 L1-022 L1-023 L1-024 L1-025(C)第四天
目录 L1-021 重要的话说三遍 题解: L1-022 奇偶分家 题解: L1-023 输出GPLT 题解: L1-024 后天 题解: L1-025 正整数AB 题解: L1-021 重要的话说三遍 分数 5 作者 陈越 单位 浙江大学 这道超级简单的题目没…...

Stable Diffusion 如何写好提示词(Prompt)
本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里。 大家好,我是水滴~~ 本文深入探讨了如何撰写出优质的提示词,内容涵盖多个维度:提示词的多样化分类、模型应用中的经典提示词案例、提供丰富资源的提示词参考…...
树莓派Py程序加入开机自启
创建服务文件 为你的服务创建一个 .service 文件。这个文件通常位于 /etc/systemd/system/ 目录下。例如,如果你的服务名称为 my_python_script.service: sudo nano /etc/systemd/system/my_python_script.service 在打开的编辑器中,输入以下…...
Java EasyExcel注解详解和实战案例
文章目录 前言一、导入依赖二、基础知识1. @ExcelProperty1.1 作用1.2 注解参数1.3 示例2. @ExcelIgnore2.1 作用2.2 示例3. @ExcelIgnoreUnannotated3.1 作用3.2 示例4. DateTimeFormat...

AHU 汇编 实验二
一、实验名称:实验二 不同寻址方式的灵活运用 二、实验内容:定义数组a[6],用多种寻址方式访问对应元素,实现(a[0]a[1])*(a[2]-a[3])/a[4],将结果保存在内存a[5]中,用debug查询结果。 实验过程&a…...

Spring Boot单元测试与热部署简析
1 Spring Boot的简介 Spring Boot是一个用于构建独立的、生产级别的Spring应用程序的框架。它简化了Spring应用程序的开发过程,提供了自动配置和默认配置,使得开发者只需专注于业务逻辑的实现,而不用去关注繁琐的配置问题。 Spring …...

3.12练习题解
1.台阶问题: 这道题目一看其实很容易想到可以用dp的板子去做,并且只需要用一维dp即可,其中dp的下标表示到达当前阶梯总共有多少种方法,由于结果有可能会很大所以一定要记得边记录边模,代码实现如下: #incl…...
Java中实现双向链表
一、目标 最近项目中实现双向链表,同时转为满二叉树。 二、代码 用java实现双向链表的代码如下: class TreeNode {int val;TreeNode left;TreeNode right;TreeNode(int x) { val x; } }public class FullBinaryTree {public TreeNode createTree(int[…...
【DevOps实战之k8s】使用Prometheus和Grafana监控K8S集群
【DevOps实战之k8s】使用Prometheus和Grafana监控K8S集群 目录 【DevOps实战之k8s】使用Prometheus和Grafana监控K8S集群系统架构Kubernetes集群指标抓取指标可视化警告PromQL示例按命名空间统计集群中的Pod数按命名空间重启Pod未就绪的PodCPU过度使用Memory过度使用健康的集群…...

【读论文】【精读】3D Gaussian Splatting for Real-Time Radiance Field Rendering
文章目录 1. What:2. Why:3. How:3.1 Real-time rendering3.2 Adaptive Control of Gaussians3.3 Differentiable 3D Gaussian splatting 4. Self-thoughts 1. What: What kind of thing is this article going to do (from the a…...

JVM理解学习
参考视频 JVM架构总览图 程序计数器 程序计数器,物理上用寄存器实现。 作用: 记住下一条JVM指令的执行地址 特点: 1 是线程私有的,随着线程的创建而创建,随着线程的消息而消息 2 是一小块内存 3 唯一不会内存溢出的地方…...

使用 Ruby 或 Python 在文件中查找
对于经常使用爬虫的我来说,在大多数文本编辑器都会有“在文件中查找”功能,主要是方便快捷的查找自己说需要的内容,那我有咩有可能用Ruby 或 Python实现类似的查找功能?这些功能又能怎么实现? 问题背景 许多流行的文本…...
python实现冒泡排序
冒泡排序是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。 以下是用Python实现冒泡排序的代…...
大数据开发(HBase面试真题-卷二)
大数据开发(HBase面试真题) 1、HBase读写数据流程?2、HBase的读写缓存?3、在删除HBase中的一个数据的时候,它什么时候真正的进行删除呢?4、HBase的一个region由哪些东西组成?5、HBase的rowkey为…...

基于springboot+vue的线上教育系统(源码+论文)
目录 前言 一、功能设计 二、功能实现 三、库表设计 四、论文 前言 现在大家的生活方式正在被计算机的发展慢慢改变着,学习方式也逐渐由书本走向荧幕,我认为这并不是不能避免的,但说实话,现在的生活方式与以往相比有太大的改变,人们的娱乐方式不仅仅…...
01-shell的自学课-基础变量学习
一、echo变量的一个坑 声明【临时变量】,然后打印出来;(拓展:env是linux的全局变量) [rootgong ~]# xinjizhiwashell [rootgong ~]# echo $xinjizhiwa shell [rootgong ~]# echo $xinjizhiwa-haha shell-haha [rootgo…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...

RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...

工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...

DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...