vue3学习(二)--- ref和reactive
文章目录
- ref
- 1.1 ref将基础类型和对象类型数据转为响应式
- 1.2 ref()获取id元素
- 1.3 isRef
- reactive
- 1.1 reactive()将引用类型数据转为响应式数据,基本类型无效
- 1.2 ref和reactive的联系
- toRef 和 toRefs
- 1.1 如果原始对象是非响应式的就不会更新视图 数据是会变的
ref
1.1 ref将基础类型和对象类型数据转为响应式
接受一个内部值,返回一个响应式的、可更改的 ref 对象,此对象只有一个指向其内部值的属性 .value。
vue3中定义数据默认不是响应式的数据,需要手动将数据转化为响应式的,这里就用到了ref()
let num1 = 20 //非响应式的import {ref} from 'vue'v
let num1 = ref(20) // 响应式的
ref()可以将数据转为响应式数据- 获取
ref(xx)的值需要使用.value的形式,html模板中使用不需要.value因为html中默认就是通过.value来获取值的
1.2 ref()获取id元素
<p ref="demo">获取ref的元素</p>import {ref,onmounted} from 'bue'onMounted(()=>{let demo= ref() 这样就获取了id=demo的元素console.log(demo.value)
})
注意!声明的变量名要跟dom元素的id一致才可以, ref不传任何参数。记得在dom挂载之后再获取
1.3 isRef
判断是不是一个ref对象
import { ref, Ref,isRef } from 'vue'
let message: Ref<string | number> = ref("我是message")
let notRef:number = 123
const changeMsg = () => {message.value = "change msg"console.log(isRef(message)); //trueconsole.log(isRef(notRef)); //false}
reactive
1.1 reactive()将引用类型数据转为响应式数据,基本类型无效

let _obj = {num: 20,}let objRef = ref(_obj)console.log('ref obj', objRef.value.num)let obj = reactive(_obj)
console.log('reactive obj', obj.num)

其实ref().value内部是跟reactive()一样的,所以说ref内部是通过reactive实现的。
- ref()----用于基本数据类型和引用类型
- reactive()----用于引用类型
1.2 ref和reactive的联系
reactive针对引用类型,内部通过new Proxy实现,因为new proxy可以直接拦截引用类型,无法直接在基础类型进行拦截。
ref针对基础类型和引用类型,内部会生成一个对象添加value属性指向数据类型,然后再通过reactive(new proxy)对生成的对象进行拦截。达到响应式的效果。
所以为什么ref的值需要用.value来获取,因为内部生成一个新的带有value属性的对象,只有对象的形式才能使用new proxy进行拦截

toRef 和 toRefs
作用:
在解构 reactive()得到对象的时候,将解构的数据变成响应式ref()类型.
当然解构出来的数据依旧需要通过.value的形式来操作.
常用于es6的解构赋值操作,因为在对一个响应式对象直接解构时解构后的数据将不再有响应式,而使用toRefs和toRef 可以方便解决这一问题。
let _obj = {num: 20,}
let obj = reactive(_obj)//toRef
let num = toRef(obj,'num') //toRefs
let { num } = toRefs(obj)
const handleClick = () => {// obj.num++// toRefs()模式num.value++}
toRef针对对象的单个属性,toRefs直接针对对象,记得需要用.value来获取值
1.1 如果原始对象是非响应式的就不会更新视图 数据是会变的
const obj = {foo: 1,bar: 1
}
const state = toRef(obj, 'bar')
// bar 转化为响应式对象
const state = toRefs(obj)
// obj 转化为响应式对象
obj对象是非响应式的 ,toRef/toRefs可以将obj转为响应式对象,但视图的更新方法在ref reactive中有实现,toRef/toRefs并没有更新视图的功能
toRef/toRefs实现的大体思路是:判断是不是响应式对象,如果是直接返回,如果不是通过ObjectRefImpl()将数据变成响应式
export function toRef<T extends object, K extends keyof T>(object: T,key: K,defaultValue?: T[K]
): ToRef<T[K]> {const val = object[key]return isRef(val)? val: (new ObjectRefImpl(object, key, defaultValue) as any)
}ObjectRefImpl的实现class ObjectRefImpl<T extends object, K extends keyof T> {public readonly __v_isRef = trueconstructor(private readonly _object: T,private readonly _key: K,private readonly _defaultValue?: T[K]) {}get value() {这里没有监听视图变化const val = this._object[this._key]return val === undefined ? (this._defaultValue as T[K]) : val}set value(newVal) {这里没有监听视图变化this._object[this._key] = newVal}
}
下面是ref的源码实现,明显的区别在于toRef没有视图的更新

相关文章:
vue3学习(二)--- ref和reactive
文章目录 ref1.1 ref将基础类型和对象类型数据转为响应式1.2 ref()获取id元素1.3 isRef reactive1.1 reactive()将引用类型数据转为响应式数据,基本类型无效1.2 ref和reactive的联系 toRef 和 toRefs1.1 如果原始对象是非响应式的就不会更新视图 数据是会变的 ref …...
网络-HTTPS
文章目录 前言一、HTTPS简介优点SSL/TSL工作流程 加密1、对称加密2、非对称加密 二、使用HTTPS1.openSSL生成私钥(1)node服务端(2)nginx配置https服务(前端) nginx服务 总结 前言 Http 存在不安全、无状态…...
GPU提升多分类问题
使用GPU加速多分类问题,与上一篇文章中前几部分代码相同 多层线性网络这里,直接使用nn.Module搭建,与之前自定义搭建的三层网络一样,但注意这里用的激活函数是ReLU的改良后的LeakyReLU,能够避免在输入小于0时出现梯…...
Selenium+Pytest自动化测试框架
前言 selenium自动化 pytest测试框架 本章你需要 一定的python基础——至少明白类与对象,封装继承 一定的selenium基础——本篇不讲selenium,不会的可以自己去看selenium中文翻译网 测试框架简介 测试框架有什么优点呢: 代码复用率高&…...
云原生Kubernetes:Rancher管理k8s集群
目录 一、理论 1.Rancher 2.Rancher 安装及配置 二、实验 1.Rancher 安装及配置 三、问题 1. Rancher 部署监控系统报错 四、总结 一、理论 1.Rancher (1) 概念 Rancher 简介 Rancher 是一个开源的企业级多集群 Kubernetes 管理平台,实现了 Kubernetes …...
Java架构师异步架构设计
目录 1 导学2 为何需要异步消息架构3 消息发送失败该如何处理4 mq接收到消息过后又丢失了消息怎么办5 消费者弄丢了消息该如何处理6 消息重复消费了该怎么处理7 消息的有序处理8 消息堆积该如何处理9 如何提高消息消费的速度10 消息应用的可插拔11 如何设计消息的统一id12 异步…...
电子书制作软件Vellum mac中文版特点
Vellum mac是一款专业的电子书制作软件,它可以帮助用户将文本文件转换为高质量的电子书,支持多种格式,包括EPUB、MOBI、PDF等。Vellum具有直观的用户界面和易于使用的工具,可以让用户快速地创建和发布电子书。 Vellum mac软件特点…...
Langchain 代理 (Agents) ,赋能超级 LLMs
原文:Langchain 代理 (Agents) ,赋能超级 LLMs - 知乎 大型语言模型(LLMs) 非常强大,但它们缺乏“最笨”的计算机程序可以轻松处理的特定能力。逻辑、计算和搜索是计算机通常擅长的领域,但 LLMs 却遇到了困…...
华为OD机考算法题:阿里巴巴找黄金宝箱(1)
题目部分 题目阿里巴巴找黄金宝箱(1)难度易题目说明一贫如洗的樵夫阿里巴巴在去砍柴的路上,无意中发现了强盗集团的藏宝地,藏宝地有编号从 0 ~ N 的箱子,每个箱子上面贴有一个数字,箱子中可能有一个黄金宝…...
【JAVA版本】websocket获取B站直播弹幕——基于直播开放平台
教程 B站直播间弹幕Websocket获取 — 哔哩哔哩直播开放平台 基于B站直播开放平台开放且未上架时,只能个人使用。 代码实现 1、相关依赖 fastjson2用于解析JSON字符串,可自行替换成别的框架。 hutool-core用于解压zip数据,可自行替换成别的…...
Vue中的监视属性
一、监视属性的使用 (一)配置watch进行监视 当我们想要监视一个属性改变的时候就可以使用监视属性监视其变化并进行操作。 语法格式如下: watch:{ 监视属性名称 : { // 监视属性的配置项 } } 1. handler函数 当监视的属性发生变化时就调…...
汽车一键启动点火开关按键一键启动按钮型号规格
汽车点火开关/移动管家一键启动按键/汽车改装引擎启动按钮型号:YD828溥款开关 一键启动按钮(适用于配套启动主机使用或原车一键启动开关更换) 1.适合配套专用板板安装 2.开孔器开孔安装 3.原车钥匙位安装 外观:黑色 按钮上有3种不…...
快速学习微服务保护框架--Sentinel
学习一个框架最好的方式就是查看官方地址,sentinel是国内阿里巴巴公司的,官网更方便官网 官网 微服务保护框架 Sentinel 1.初识Sentinel 1.1.雪崩问题及解决方案 1.1.1.雪崩问题 微服务中,服务间调用关系错综复杂,一个微服务往往依赖于多个其它微…...
bootz启动 Linux内核过程总结
一. bootz启动Linux uboot 启动 Linux内核使用bootz命令。当然还有其它的启动命令,例如,bootm命令等等。 前面几篇文章分析 bootz命令启动 Linux内核的过程中涉及的几个重要函数。 bootz启动 Linux内核过程中涉及的全局变量images_凌肖战的博客-CSDN博…...
前端项目--尚医通学习分享
这段时间跟着线上课程完成了一个项目:商医通(基于Vue3TypeScript的医院挂号平台)。具体我就不过多地介绍其具体功能以及详细的实现步骤了,感兴趣的小伙伴直接:传送门 。该文章我就分享一下在该项目中学习到的一些知识点…...
【Python】QTreeWidget树形结构添加
源码: # 参考网址: https://blog.csdn.net/weixin_42286052/article/details/129532631 import os.path import sys from PySide6.QtWidgets import QApplication,QMainWindow,QHBoxLayout,QVBoxLayout,QPushButton,QTreeWidget,QTreeWidgetItem,QTreeW…...
day 2 2.3.2 类和对象
具有相同或相似性质的一组对象的抽象就是类 null只能被转换成引用类型,不能转换成基本类型,因此不要把一个null值赋给基本数据类型的变量 Java语言支持的类型分为两类:基本类型和引用类型 基本类型包括boolean类型和数值类型。数值类型有整…...
vscode虚拟环境使用jupyter
在某虚拟环境内安装torch,但是ipyn文件保存后无法正常导入torch 1.conda环境下安装Jupyter等一切配置,进入虚拟环境 2.conda install nb_conda_kernels 3.安装完成后重新打开VSCode,在运行Jupyter notebook中的代码之前,在右上…...
Maven 依赖管理
Maven 一个核心的特性就是依赖管理。当我们处理多模块的项目(包含成百上千个模块或者子项目),模块间的依赖关系就变得非常复杂,管理也变得很困难。针对此种情形,Maven 提供了一种高度控制的方法。 可传递性依赖发现 …...
【踩坑】hive脚本笛卡尔积严重降低查询效率问题
前一阵子查看我们公司的大数据平台的离线脚本运行情况, 结果发现有一个任务居然跑了一天多, 要知道这还只是几千万量级的表, 且这个任务是每天需要执行的 于是我把hive脚本捞出来看了下, 发现无非多join了几个复杂的子查询, 应该不至于这么久, 包括我又检查了是不是没有加上每…...
解锁iOS设备:applera1n工具的安全绕过指南
解锁iOS设备:applera1n工具的安全绕过指南 【免费下载链接】applera1n icloud bypass for ios 15-16 项目地址: https://gitcode.com/gh_mirrors/ap/applera1n applera1n是一款开源工具,专门为A9-A11芯片的iOS 15.0-16.6.1设备提供激活锁绕过方案…...
OpenModScan:工业总线测试与协议调试的开源解决方案
OpenModScan:工业总线测试与协议调试的开源解决方案 【免费下载链接】OpenModScan Open ModScan is a Free Modbus Master (Client) Utility 项目地址: https://gitcode.com/gh_mirrors/op/OpenModScan 在工业自动化领域,设备间的通讯可靠性直接决…...
智能自动化OpenCore配置工具:OpCore-Simplify让黑苹果新手也能15分钟完成专业级EFI构建
智能自动化OpenCore配置工具:OpCore-Simplify让黑苹果新手也能15分钟完成专业级EFI构建 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 当…...
Swift Core ML Stable Diffusion架构设计:打造高性能移动端AI绘画引擎
Swift Core ML Stable Diffusion架构设计:打造高性能移动端AI绘画引擎 【免费下载链接】swift-coreml-diffusers Swift app demonstrating Core ML Stable Diffusion 项目地址: https://gitcode.com/gh_mirrors/sw/swift-coreml-diffusers 想要在iPhone和Mac…...
从选型到接线:工业现场S7-1200 PLC读取K型热电偶温度的完整避坑指南
从选型到接线:工业现场S7-1200 PLC读取K型热电偶温度的完整避坑指南 在热处理车间嘈杂的设备声中,一组K型热电偶正默默监测着关键工艺温度。突然,中控室屏幕上的温度曲线开始剧烈波动——这是每位自动化工程师都熟悉的"噩梦场景"。…...
OpenClaw(龙虾)WSL Ubuntu 环境安装配置完整指南
从零开始在 WSL Ubuntu 中安装 OpenClaw,配置公司中转站,解决各种问题,最终成功运行。目录环境准备OpenClaw 安装配置文件详解常见问题与解决方案日常使用指南完整配置模板一、环境准备1.1 确认 WSL Ubuntu 环境# 查看 Ubuntu 版本 lsb_relea…...
星思半导体系统级通信测试实验室设备齐全,为卫星通信芯片验证提供坚实保障
随着政府工作报告首次为卫星互联网“定调”,资本市场的聚光灯迅速转向这条黄金赛道。业内观察指出,2026年的市场关注点更加务实,聚焦于真正具备核心技术、能参与国际竞争的上游“硬科技”企业。在政策与资本的同频共振下,以星思半…...
智能体快速构建指南
智能体快速构建指南 基于 NVIDIA GTC 大会「Agentic AI 101」主题讲座整理 覆盖:本质认知 → 核心模块 → 落地场景 → 实操路径 一、Agentic AI 是什么?与传统 AI 的本质分野 一句话定义 传统 AI 告诉你怎么做,Agentic AI 直接帮你做完。 传…...
WechatBakTool终极指南:如何安全备份与恢复微信聊天记录
WechatBakTool终极指南:如何安全备份与恢复微信聊天记录 【免费下载链接】WechatBakTool 基于C#的微信PC版聊天记录备份工具,提供图形界面,解密微信数据库并导出聊天记录。 项目地址: https://gitcode.com/gh_mirrors/we/WechatBakTool …...
深入解析XSpiPs_PolledTransfer与XSpiPs_Transfer的片选信号行为差异
1. 从波形图看片选信号的关键差异 第一次用逻辑分析仪抓取SPI波形时,我被XSpiPs_PolledTransfer和XSpiPs_Transfer的片选信号差异惊到了。同样是发送两个字节的数据,前者像老式电报机一样稳定保持CS低电平,后者却像发摩尔斯电码似地频繁跳变。…...
