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

vue3从精通到入门7:ref系列

Vue 3 的 Ref 是一个集合,包括多个与响应式引用相关的功能,这些功能共同构成了 Vue 3 响应式系统的重要组成部分。以下是更全面的介绍:

1.ref

ref 接受一个内部值并返回一个响应式且可变的 ref 对象。这个对象具有一个 .value 属性,用于读取和设置其内部值。通过 ref,我们可以将基本数据类型或对象转换为响应式引用,并在组件中方便地跟踪和更新这些值。

<template>  <div>  <p>Count: {{ count }}</p>  <button @click="increment">Increment</button>  </div>  
</template>  <script setup lang="ts">  
import { ref } from 'vue';  // 使用 ref 创建一个响应式引用,并为其指定初始值和类型  
const count = ref<number>(0);  // 定义一个方法来增加计数器的值  
const increment = () => {  count.value++;  
};  
</script>

2.shallowRef

shallowRef 与 ref 类似,但它只对其引用的根级别属性进行响应式转换。如果引用的值是一个对象或数组,那么该对象的内部属性或数组的元素不会变为响应式。这使得 shallowRef 在处理大型数据结构时更为高效,因为它避免了不必要的深度响应式转换。

<template>  <div>  <p>Nested Object: {{ nestedObject.value.prop1 }}</p>  <button @click="updateNestedObject">Update Nested Object</button>  </div>  
</template>  <script setup lang="ts">  
import { shallowRef } from 'vue';  // 创建一个浅响应式的对象引用  
const nestedObject = shallowRef({  prop1: 'Initial Value',  prop2: 'Another Value',  
});  // 定义一个方法来更新嵌套对象的属性  
const updateNestedObject = () => {  nestedObject.value.prop1 = 'Updated Value';  
};  
</script>

如果 nestedObject 的直接属性(如 prop1 和 prop2)发生变化,Vue 将能够检测到这些变化并更新 DOM。

如果 nestedObject 的属性本身包含复杂的嵌套结构(如数组或对象),则这些内部结构的变化不会触发响应式更新。 

3.toRef 和 toRefs

toRef 和 toRefs 是用于处理响应式对象的工具。toRef 基于响应式对象上的一个属性,创建一个对应的 ref,这样创建的 ref 与其源属性保持同步。而 toRefs 则将响应式对象的属性转换为独立的响应式引用,使得在模板中可以直接使用这些属性,而无需通过 .value 访问。

<template>  <div>  <p>Name: {{ name }}</p>  <p>Age: {{ age }}</p>  <button @click="incrementAge">Increment Age</button>  </div>  
</template>  <script setup lang="ts">  
import { reactive, toRef, toRefs } from 'vue';  // 创建一个响应式对象  
const state = reactive({  name: 'John Doe',  age: 30,  
});  // 使用 toRef 提取响应式引用  
const nameRef = toRef(state, 'name');  // 使用 toRefs 解构出响应式引用对象  
const { age } = toRefs(state);  // 定义一个方法来增加年龄  
const incrementAge = () => {  age.value++;  
};  
</script>

4.customRef

customRef 允许你创建自定义的响应式引用。它接受一个工厂函数,该函数可以定义自己的依赖跟踪和触发更新的逻辑。这使得 customRef 在处理复杂逻辑或需要更精细控制响应式行为时非常有用。

<template>  <div>  <p>Custom Ref Value: {{ customValue }}</p>  <button @click="incrementCustomValue">Increment Custom Value</button>  </div>  
</template>  <script setup lang="ts">  
import { customRef } from 'vue';  // 自定义 ref 的 getter 和 setter  
function customRefFactory<T>(defaultValue: T) {  let value = defaultValue;  return customRef<T>((track, trigger) => {  return {  get() {  track();  return value;  },  set(newValue: T) {  value = newValue;  trigger();  },  };  };  
}  // 使用自定义 ref 工厂函数创建响应式引用  
const customValue = customRefFactory(0);  // 定义一个方法来增加自定义值的值  
const incrementCustomValue = () => {  customValue.value++;  
};  
</script>

5.unref

unref 是一个辅助函数,用于处理可能是 ref 的值。如果传递给 unref 的值是一个 ref,则返回其 .value;否则,直接返回该值。这在你不确定一个值是否是 ref 时特别有用,可以避免在模板或计算属性中不必要的 .value 访问。

<template>  <div>  <p>Value from ref: {{ refValue }}</p>  <p>Value from non-ref: {{ nonRefValue }}</p>  </div>  
</template>  <script setup lang="ts">  
import { ref, unref } from 'vue';  // 创建一个 ref  
const refValue = ref('This is from a ref');  // 创建一个非 ref 的值  
const nonRefValue = 'This is not from a ref';  // 一个函数,它接受一个可能是 ref 的值,并使用 unref 来获取其值  
function displayValue(possibleRef: any) {  const value = unref(possibleRef);  alert(`The value is: ${value}`);  
}  // 在模板被挂载后调用 displayValue 函数,分别传入 ref 和非 ref 的值  
onMounted(() => {  displayValue(refValue); // 显示 'This is from a ref'  displayValue(nonRefValue); // 显示 'This is not from a ref'  
});  
</script>

6.isRef

isRef 是一个用于检查一个值是否为 ref 的函数。它返回一个布尔值,指示给定的值是否是一个 ref 对象。这在编写可重用逻辑或工具函数时非常有用,因为你可以根据值是否为 ref 来采取不同的操作。

<template>  <div>  <p v-if="isCountRef">Count is a ref: {{ count }}</p>  <p v-else>Count is not a ref: {{ count }}</p>  <button @click="increment">Increment</button>  </div>  
</template>  <script setup lang="ts">  
import { ref, isRef } from 'vue';  const count = ref(0);  
const isCountRef = isRef(count);  const increment = () => {  count.value++;  
}  
</script>

相关文章:

vue3从精通到入门7:ref系列

Vue 3 的 Ref 是一个集合&#xff0c;包括多个与响应式引用相关的功能&#xff0c;这些功能共同构成了 Vue 3 响应式系统的重要组成部分。以下是更全面的介绍&#xff1a; 1.ref ref 接受一个内部值并返回一个响应式且可变的 ref 对象。这个对象具有一个 .value 属性&#xf…...

灵动翻译音频文件字幕提取及翻译;剪映视频添加字幕

参考&#xff1a;视频音频下载工具 https://tuberipper.com/21/save/mp3 1、灵动翻译音频文件字幕提取及翻译 灵动翻译可以直接chorme浏览器插件安装&#xff1a; 点击使用&#xff0c;可以上传音频文件 上传后自动翻译&#xff0c;然后点击译文即可翻译成中文&#xff0c;…...

在Gitee上创建新仓库

1. 登录到你的Gitee账户。 2. 在Gitee首页或仓库页面&#xff0c;点击“新建仓库”按钮。 3. 填写仓库名称、描述&#xff08;可选&#xff09;、选择仓库是否公开等信息。 4. 点击“创建仓库”按钮完成创建。 2. 本地代码连接到远程仓库 假设你已经在本地有一个项目&#…...

linux 配置NFS

1、NFS简介 NFS 是Network File System的缩写&#xff0c;即⽹络⽂件系统。NFS 的基本原则是“容许不同的客户 端及服务端通过⼀组RPC分享相同的⽂件系统”&#xff0c;它是独⽴于操作系统&#xff0c;容许不同硬件及操作 系统的系统共同进⾏⽂件的分享。 NFS在⽂件传送或信息…...

大疆御Pro(一代)更换晓spark摄像头评测

御Pro是17年的老机器&#xff0c;除了摄像头有点拉跨&#xff0c;续航、抗风、操作性在大疆民用系列里面算是数得上的。 机缘巧合&#xff0c;手头有几个御的空镜头&#xff08;里面的芯片已经去掉了&#xff09;&#xff0c;还有几个晓的摄像头&#xff08;只有芯片&#xff0…...

【小技巧】gitlab怎么在每次git push的时候不用输入账号密码?使用 SSH 密钥 的原理是什么?

1. gitlab怎么在每次git push的时候不用输入账号密码&#xff1f; 要在每次执行 git push 时避免输入 GitLab 的账号和密码&#xff0c;你可以通过以下几种方法实现&#xff1a; 使用 SSH 密钥&#xff1a;这是最常用的方法&#xff0c;通过生成 SSH 密钥并将其添加到 GitLab …...

笔记: JavaSE day15 笔记

第十五天课堂笔记 数组 可变长参数★★★ 方法 : 返回值类型 方法名(参数类型 参数名 , 参数类型 … 可变长参数名){}方法体 : 变长参数 相当于一个数组一个数组最多只能有一个可变长参数, 并放到列表的最后parameter : 方法参数 数组相关算法★★ 冒泡排序 由小到大: 从前…...

【Golang星辰图】数据处理的航海家:征服数据海洋的航行工具

数据处理的建筑师&#xff1a;用Go语言中构建稳固的数据分析建筑物 前言 数据处理和分析是现代计算机科学中的关键任务之一&#xff0c;而Go语言作为一门现代化的编程语言&#xff0c;也需要强大的数据处理和分析库来支持其在这一领域的应用。本文将介绍几款优秀的数据处理和…...

容器网络测试关键问题

资料问题 主要影响客户体验, 低级问题. 类似于单词拼写错误, 用词有歧义&#xff0c;等。 另一点是&#xff0c;我们的用户文档&#xff0c;主要偏向于技术向的描述&#xff0c;各种参数功能罗列。友商有比较好的最佳实践操作说明。我们后面也会都增加这样的最佳实践。golang o…...

6、Cocos Creator 2D 渲染组件:​Sprite 组件​

Sprite 组件 Sprite&#xff08;精灵&#xff09;是 2D/3D 游戏最常见的显示图像的方式&#xff0c;在节点上添加 Sprite 组件&#xff0c;就可以在场景中显示项目资源中的图片。 属性功能说明Type渲染模式&#xff0c;包括普通&#xff08;Simple&#xff09;、九宫格&#x…...

算法沉淀——动态规划篇(子数组系列问题(上))

算法沉淀——动态规划篇&#xff08;子数组系列问题&#xff08;上&#xff09;&#xff09; 前言一、最大子数组和二、环形子数组的最大和三、乘积最大子数组四、乘积为正数的最长子数组长度 前言 几乎所有的动态规划问题大致可分为以下5个步骤&#xff0c;后续所有问题分析都…...

通知中心架构:打造高效沟通平台,提升信息传递效率

随着信息技术的快速发展&#xff0c;通知中心架构作为一种关键的沟通工具&#xff0c;正逐渐成为各类应用和系统中必不可少的组成部分。本文将深入探讨通知中心架构的意义、设计原则以及在实际场景中的应用。 ### 什么是通知中心架构&#xff1f; 通知中心架构是指通过集中管…...

【Arduino使用SNR9816TTS模块教程】

【Arduino使用SNR9816TTS模块教程】 1.前言2. 硬件连接3. Arduino代码3.1 环境配置3.2 Arduino源码 4. 调试步骤5. 总结 1.前言 在今天的教程中&#xff0c;我们将详细介绍如何使用Arduino IDE开发ESP32C3与汕头新纳捷科技有限公司生产的SNR9816TTS中文人声语音合成模块进行交…...

牛客练习赛123(A,B,C,D)

牛客挑战赛&#xff0c;练习赛和小白月赛周赛不是一种东西。这玩意跟CF的div12差不多难度。而且找不到题解。所以决定不等题解补题了&#xff0c;直接写题解了。 比赛链接 光速签到下班&#xff0c;rk。感觉E可能能补掉&#xff0c;看情况补吧。 B题感觉之前考了两次&#x…...

docker部署-RabbitMq

1. 参考 RabbitMq官网 docker官网 2. 拉取镜像 这里改为自己需要的版本即可&#xff0c;下面容器也需要同理修改 docker pull rabbitmq:3.12-management3. 运行容器 docker run \ --namemy-rabbitmq-01 \ -p 5672:5672 \ -p 15672:15672 \ -d \ --restart always \ -…...

【智能算法】蜜獾算法(HBA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2021年&#xff0c;FA Hashim等人受到自然界中蜜獾狩猎行为启发&#xff0c;提出了蜜獾算法&#xff08;(Honey Badger Algorithm&#xff0c;HBA&#xff09;。 2.算法原理 2.1算法思想 蜜獾以其…...

9、鸿蒙学习-开发及引用静态共享包(API 9)

HAR&#xff08;Harmony Archive&#xff09;是静态共享包&#xff0c;可以包含代码、C库、资源和配置文件。通过HAR可以实现多个模块或多个工程共享ArkUI组件、资源等相关代码。HAR不同于HAP&#xff0c;不能独立安装运行在设备上&#xff0c;只能作为应用模块的依赖项被引用。…...

[Pytorch]:PyTorch中张量乘法大全

在 PyTorch 中&#xff0c;有多种方法可以执行张量之间的乘法。这里列出了一些常见的乘法操作&#xff1a; 总结&#xff1a; 逐元素乘法&#xff1a;*ortorch.mul()矩阵乘法&#xff1a;ortorch.mm()ortorch.matmul()点积&#xff1a;torch.Tensor.dot()批量矩阵乘法&#xff…...

【软考】防火墙技术

目录 1. 概念2. 包过滤防火墙3. 应用代理网关防火墙4. 状态检测技术防火墙 1. 概念 1.防火墙(Firewall)是建立在内外网络边界上的过滤封锁机制&#xff0c;它认为内部网络是安全和可信赖的&#xff0c;而外部网络是不安全和不可信赖的。2.防火墙的作用是防止不希望的、未经授权…...

OpenHarmony实战:Makefile方式组织编译的库移植

以yxml库为例&#xff0c;其移植过程如下文所示。 源码获取 从仓库获取yxml源码&#xff0c;其目录结构如下表&#xff1a; 表1 源码目录结构 名称描述yxml/bench/benchmark相关代码yxml/test/测试输入输出文件&#xff0c;及测试脚本yxml/Makefile编译组织文件yxml/.gitat…...

嵌入式C语言--GPT通用定时器

嵌入式C语言–GPT通用定时器 嵌入式C语言--GPT通用定时器 嵌入式C语言--GPT通用定时器一. GPT基本概念二. GPT的作用三. GPT通道的四个状态四. Continuous/One-Shot模式3.1&#xff09;Continuous模式3.2&#xff09;One-Shot模式 一. GPT基本概念 GPT即General Purpose Timer…...

『Apisix系列』破局传统架构:探索新一代微服务体系下的API管理新范式与最佳实践

一、『Apisix安装部署』 &#x1f680; 1.1 手把手教你从零部署APISIX高性能API网关 二、『Apisix入门篇』 &#x1f680; 2.1 从零到一掌握Apache APISIX&#xff1a;架构解析与实战指南 三、『Apisix进阶篇』 &#x1f680; 3.1 动态负载均衡&#xff1a;APISIX的实战演练…...

如何在极狐GitLab 自定义 Pages 域名、SSL/TLS 证书

本文作者&#xff1a;徐晓伟 GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 本文主要讲述了在极狐GitLab 用户…...

React Native 应用打包

引言 在将React Native应用上架至App Store时&#xff0c;除了通常的上架流程外&#xff0c;还需考虑一些额外的优化策略。本文将介绍如何通过配置App Transport Security、Release Scheme和启动屏优化技巧来提升React Native应用的上架质量和用户体验。 配置 App Transport…...

单链表就地逆置

算法思想&#xff1a;构建一个带头结点的单链表L&#xff0c;然后访问链表中的每一个数据结点&#xff0c;将访问到的数据结点依此插入到L的头节点之后。 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> typedef int ElemType; typedef s…...

MTU/TCPMSS/VLAN/ACCESS/TRUNK/HYBRID

MTU RFC标准定义以太网的默认MTU值为1500 最小64字节是为了保证最极端的冲突能被检测到&#xff0c;64字节是能被检测到的最小值&#xff1b;最大不超过1518字节是为了防止过长的帧传输时间过长而占用共享链路太长时间导致其他业务阻塞。所以规定以太网帧大小为64~1518字节&am…...

Spring Boot的基础知识和应用

在快速发展的软件开发领域&#xff0c;Spring Boot已经成为了一个广受欢迎的框架&#xff0c;它极大地简化了Spring应用的初始搭建以及开发过程。Spring Boot遵循“约定优于配置”的原则&#xff0c;通过默认配置减少了开发者的配置工作量&#xff0c;使得开发者能够更专注于业…...

【Linux】详解动静态库的制作和使用动静态库在系统中的配置步骤

一、库的作用 1、提高开发效率&#xff0c;让开发者所有的函数实现不用从零开始。 2、隐藏源代码。 库其实就是所有的.o文件用特定的方式进行打包形成一个文件&#xff0c;各个.o文件包含了源代码中的机器语言指令。 二、动态库和静态库的制作和使用 2.1、静态库的制作和使用…...

开源模型应用落地-qwen1.5-7b-chat-LoRA微调(二)

一、前言 预训练模型提供的是通用能力,对于某些特定领域的问题可能不够擅长,通过微调可以让模型更适应这些特定领域的需求,让它更擅长解决具体的问题。 本篇是开源模型应用落地-qwen-7b-chat-LoRA微调(一)进阶篇,学习通义千问最新1.5系列模型的微调方式。 二、术语介绍 …...

【现代企业管理】企业组织结构和组织文化的理论与实践——以华为为例

一、前言 管理是科学和艺术的统一体&#xff0c;它是企业成长的保证。企业管理中&#xff0c;管理者面对的往往不是一个完整的系统&#xff0c;而是各种不具有整体规律性的零碎信息的总和&#xff0c;因此进行信息的整合和研究是管理的重点和关键。 组织管理作为管理的四大职…...

网站后台功能需求/目前在哪个平台做推广好

科学研究的目的是通过观察、实验和思考来更好地理解我们周围的世界&#xff0c;从而改进我们的生活和社会。科学研究可以帮助我们解决许多关键问题&#xff0c;比如改善医疗和公共卫生、保护环境、提高农业生产率、发明新技术和产品等。 基础研究是科学研究的一种&#xff0c;它…...

企业网站免费模板/网站开发北京公司

2019独角兽企业重金招聘Python工程师标准>>> JavaScript的self和this使用小结 var self this? Getting Out of Binding Situations in JavaScript Window 对象 js对象中使用_selfthis的原因&#xff1f; 转载于:https://my.oschina.net/letiantian/blog/282715...

网站建设的概念/关键词查询工具有哪些

目录关键词1&#xff1a;隔离关键词2&#xff1a;限制通过前面的文章&#xff0c;我们可以得出以下几点事实&#xff1a;容器技术的兴起源于 Paas 技术的普及Docker 公司发布的 Docker 项目具有里程碑式的意义Docker 项目通过容器镜像&#xff0c;解决了应用打包这个根本性难题…...

做网站都用什么工具/万网域名注册官网阿里云

while循环与do while循环的区别如下&#xff1a;1、循环结构的表达式不同while循环结构的表达式为&#xff1a;while(表达式){循环体}&#xff1b;do while循环结构的表达式为&#xff1a;do{循环体;}while (条件表达);。2、执行时判断方式不同while循环执行时只有当满足条件时…...

网站做节日营销活动的目的/电商培训机构有哪些?哪家比较好

本节书摘来异步社区《OpenGL ES 3.x游戏开发&#xff08;下卷&#xff09;》一书中的第1章&#xff0c;第1.1节&#xff0c;作者&#xff1a; 吴亚峰 责编&#xff1a; 张涛&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看。 1.6 帧缓冲与渲染缓冲 上一节介绍…...

专门做二手手机的网站/百度搜索网页

python如何识别图片中的文字&#xff0c;这里给个案例并附上详细步骤&#xff1a;模块包的安装&#xff1a;1、安装PIL&#xff1a;pip install Pillow2、安装pytesser3&#xff1a;pip install pytesser33、安装pytesseract&#xff1a;pip install pytesseract4、安装autopy3…...