前端基础之《Vue(28)—Vue3 ref相关API》

ref相关API介绍

1、ref()

(1)ref介绍
ref用于定义基本数据类型,比如:string / boolean / number等(因为这几个没办法代理)。
ref的背后是使用reactive来实现的响应式。
使用.value来访问变量的值。

(2)打印一个ref对象

RefImpl引用实现,就是个响应式变量
因为Vue3给基本数据类型外面包了一层(做了Proxy()代理,加get、set钩子),你传了1000进来,得到的是对象
num = {
value: 1000
}

(3)ref的变量在视图模板中都不要加.value,因为指令会自动加

2、isRef()

(1)作用:判断一个变量是否为一个ref对象
(2)语法:const bol = isRef(x)

3、unref()

(1)作用:用于返回一个值,如果访问的是ref变量,就返回其.value值。如果不是ref变量就直接返回
这是 val = isRef(val) ? val.value : val 计算的一个语法糖
(2)语法:const x = unref(y)

4、customRef()

(1)作用:自定义ref对象,把ref对象改写成get/set,进一步可以为它们添加track/trigger

(2)、customRef()关联的生命周期钩子
onRenderTracked()
onRenderTriggered()
这两个是用于调试的,只能在开发环境使用,生产环境不起作用。用来对变量进行劫持。

    const name = customRef((track, trigger)=>{ // track和trigger是两个函数let value = ''return {get () {track() // 如果有人访问name,就执行track()return value},set (val) {value = valtrigger() // 如果有人修改name,就执行trigger()}}})// 仅供在开发环境下,用于ref变量的调试onRenderTracked((ev)=>{console.log('name被跟踪了', ev)})onRenderTriggered((ev)=>{console.log('name被修改了', ev)})

5、toRef()

(1)作用:把一个reactive对象中的某个属性变成ref变量
(2)语法:const x = toRef(reactive(obj), 'key')

<script setup>import { reactive, toRef } from 'vue'const user = reactive({name: '张三', age: 10})console.log('---user', user)const name = toRef(user, 'name')console.log('---name', name.value) // name是ref变量</script>

6、toRefs()

(1)作用:把一个reactive响应式对象变成ref变量
(2)语法:const obj1 = toRefs(reactive(obj))
(3)应用:在子组件中接收父组件传递过来的props时,使用toRefs把它变成响应式的
例如:const {a, b} = toRefs(props)

<script setup>import { isRef, reactive, toRef, toRefs } from 'vue'const user = reactive({name: '张三', age: 10})console.log('---user', user)// const name = toRef(user, 'name')// console.log('---name', name.value) // name是ref变量const {name, age} = toRefs(user)console.log('---1', isRef(name))console.log('---2', isRef(age))</script>

7、shallowRef()

(1)作用:对复杂层级的对象,只将其第一层变成ref响应(性能优化)
用shallowRef包裹的对象,只有第一层变化才更新,更改后面的层不更新,第一层是.value
(2)语法:const x = shallowRef({a:{b:{c:1}}, d:2}),如此a、b、c、d变化都不会自动更新,需要借助triggerRef来强制更新
(3)shallowRef只劫持第一层

<script setup>import { isRef, reactive, toRef, toRefs, shallowRef, ref } from 'vue'// ref包裹对象const info1 = ref({a: {b: {c: 3}}})console.log('---3', info1.value.a.b.c) // 要访问c,需要写的很长const info2 = shallowRef({a: {b: {c: 3}}})console.log('---4', info2) // 只有info2.value = xxx 才会更新</script>

8、triggerRef()

(1)作用:强制更新一个shallowRef对象的渲染
(2)语法:triggerRef(shallowRef对象),只能接收一个shallowRef的变量,强制更新这个变量

9、reactive()

(1)作用:定义响应式变量,一般用于定义引用数据类型,如果是基本数据类型,建议使用ref来定义
(2)语法:const info = reactive([])
(3)如果定义对象类型、数组类型声明式变量,用reactive定义

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/93731.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/93731.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

项目管理中如何避免延期?核心策略分析

在项目管理中避免延期&#xff0c;并非依赖于单一技巧&#xff0c;而是要构筑一个系统性的、多维度的防御体系。其核心策略涵盖了&#xff1a;进行全面细致的前期规划与估算、实施严格的范围管理与变更控制、建立主动式全过程风险管理机制、维持高透明度的持续沟通、以及采用数…

【计算机视觉与代码大模型全景解析:从理论基础到学习路线】

&#x1f4d8;计算机视觉与代码大模型全景解析&#xff1a;从理论基础到学习路线&#x1f4d1; 目录1️⃣ 摘要2️⃣ 计算机视觉与大模型基础理论  2.1 &#x1f9e0; 深度卷积神经网络基础原理  2.2 &#x1f441;️‍&#x1f5e8;️ 计算机视觉的技术发展与视觉图灵概念…

力扣-104. 二叉树的最大深度

题目链接 104. 二叉树的最大深度 class Solution {public int maxDepth(TreeNode root) {if (root null)return 0;return Math.max(maxDepth(root.left), maxDepth(root.right)) 1;} }小结&#xff1a;秒了&#xff01;&#xff01;&#xff01;

在超算平台异构加速卡AI * 1卡的Ubuntu20.04环境下安装docker服务(未成功)

为了使用dify&#xff0c;需要安装docker服务&#xff0c;于是在超算平台异构加速卡AI * 1卡的Ubuntu20.04环境下尝试安装docker服务 首先要看下系统是Ubuntu的哪个版本&#xff1a; cat /etc/os-release NAME"Ubuntu" VERSION"20.04.1 LTS (Focal Fossa)"…

[特殊字符] 深入解析String的不可变性:Java字符串设计的精妙之处

一、什么是String的不可变性? String的不可变性是Java语言中一个基础但极其重要的概念。简单来说:一旦一个String对象被创建,它的值就永远不能被改变。任何看似"修改"字符串的操作,实际上都是创建了一个全新的String对象。 生活中的类比 想象一个刻在石头上的文字…

基于FRP + ttyd 的远程Web终端控制:无SSH环境下的救急方案

基于FRP ttyd 的远程Web终端控制&#xff1a;无SSH环境下的救急方案一、背景&#xff1a;当远程访问陷入困境时二、方案&#xff1a;FRP内网穿透 ttyd Web终端三、操作步骤详解&#xff08;Linux环境&#xff09;0. 前提条件1. 在被控服务器上创建工作目录2. 下载必要的软件3…

用 AI 自动生成口型同步视频,短视频内容也能一人完成

近几年做跨境电商或内容运营的同学&#xff0c;应该都能感受到视频内容正逐渐从“锦上添花”变成了“必选项”。尤其是 TikTok、Instagram Reels、Facebook 短视频、甚至一些独立站内嵌视频讲解页&#xff0c;对带讲解、有人脸、自然语音的视频内容都有显著的转化提升作用。但实…

全基因组关联分析(GWAS)中模型参数选择:MLM、GLM与FarmCPU的深度解析

全基因组关联分析(GWAS)是识别与复杂性状相关的遗传变异的重要工具。然而&#xff0c;模型选择不当会导致假阳性率升高或统计功效降低。本文将为大家介绍GWAS中如何选择合适的模型参数&#xff0c;重点解析广义线性模型(GLM)、混合线性模型(MLM)和FarmCPU三种主流模型的原理、区…

6.苹果ios逆向-过ssl证书检测-安装SSL Kill Switch 3

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a;图灵Python学院 工具下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1bb8NhJc9eTuLzQr39lF55Q?pwdzy89 提取码&#xff1…

Tomcat,WebLogic等中间件漏洞实战解析

1.tomactCVE-2017-12615首先启动环境&#xff0c;这里所有的漏洞都是在vulhub中的然后去访问我们的网站点击打开哥斯拉去生成一个jsp木马然后打开抓包&#xff0c;刷新一下页面&#xff0c;修改put方法将我们的木马上传一下&#xff0c;这里需要在jsp后加一个/&#xff0c;来绕…

15、点云<—>深度图转换原理

* 定义虚拟相机分辨率. Width := 800 Height := 800* 定义一个系数用于在3D模型中计算图像的边缘 BorderFact := 1.5* 是否选择镜头. IsTelecentric := false GenParamName := [lut,intensity,disp_pose_0,alpha_0,disp_background] GenParamValue := [hsi,coord_z,true,0.3,tr…

大疆无人机开发:MQTT 赋能机场系统集成的Java实战之旅

目录 集成实现步骤​ 项目初始化​ MQTT 连接配置​ 大疆无人机与 MQTT 集成​ 机场系统功能实现​ 代码实战与案例分析​ 示例代码展示​ 案例分析​ 数据格式不匹配问题​ 指令冲突问题​ 性能优化与安全保障​ 性能优化策略​ 安全保障措施​ 集成实现步骤​ …

逻辑回归详解:从数学原理到实际应用

文章目录一、逻辑回归的核心思想&#xff1a;从线性到概率1. 线性回归的局限与突破Sigmoid函数特性&#xff08;代码可视化&#xff09;&#xff1a;2. 逻辑回归的预测公式二、损失函数&#xff1a;如何学习最优参数&#xff1f;1. 对数损失函数的数学定义损失函数解析&#xf…

粒子群优化算法(Particle Swarm Optimization, PSO) 求解二维 Rastrigin 函数最小值问题

前言 提醒&#xff1a; 文章内容为方便作者自己后日复习与查阅而进行的书写与发布&#xff0c;其中引用内容都会使用链接表明出处&#xff08;如有侵权问题&#xff0c;请及时联系&#xff09;。 其中内容多为一次书写&#xff0c;缺少检查与订正&#xff0c;如有问题或其他拓展…

【GitHub Workflows 基础(二)】深入理解 on、jobs、steps 的核心语法与执行逻辑

&#x1f4d8; GitHub Workflows 基础&#xff08;二&#xff09;&#xff1a;深入理解 on、jobs、steps 的核心语法与执行逻辑继第一篇讲完 .github/workflows/ 中多个工作流的结构后&#xff0c;本篇将深入 GitHub Actions 的核心三要素&#xff1a;on&#xff08;触发器&…

React Filber及核心原理

1. React Fiber 的核心目标‌‌增量渲染‌&#xff1a;将大型更新拆解为可中断的小任务&#xff08;时间切片&#xff09;&#xff0c;避免阻塞主线程‌优先级调度‌&#xff1a;动态管理任务执行顺序&#xff08;如用户交互 > 动画 > 数据加载&#xff09;。与浏览器协作…

Shader开发(五)什么是渲染管线

在计算机图形学中&#xff0c;渲染管线&#xff08;Rendering Pipeline&#xff09; 是图形处理器&#xff08;GPU&#xff09;将3D网格数据转化为屏幕图像的核心流程。无论是炫酷的游戏画面还是逼真的动画场景&#xff0c;这一切都离不开渲染管线的默默工作。对于想要学习着色…

CentOS7 使用Docker安装MinIO完整教程

目录 1. MinIO简介 什么是MinIO? 为什么选择Docker安装? 2. 环境准备 检查Docker状态 检查防火墙设置 创建存储目录 3. 快速启动MinIO 基础启动命令 验证启动状态 4. 配置持久化存储 停止并删除临时容器 使用数据卷启动MinIO 验证数据持久化 5. 访问MinIO控制台…

【数据库】时序数据库选型指南:从大数据视角看IoTDB的核心优势

文章目录前言-官网链接一、时序数据管理的时代挑战二、时序数据库选型的六大核心维度1. 数据模型设计2. 写入与查询性能3. 存储效率4. 系统扩展性5. 生态兼容性6. 运维复杂度三、IoTDB的技术架构解析1. 存储引擎创新2. 计算引擎优势3. 分布式架构设计四、行业解决方案对比1. 能…

【25-cv-08364】Keith携Hello Angel版权图发案

Hello Angel版权图案件号&#xff1a;25-cv-08364起诉时间&#xff1a;2025/7/22原告&#xff1a;Angelea Clark Van Dam原告律所&#xff1a;Keith受理法院&#xff1a;伊利诺伊州北区地方法院原告介绍原告是是一位来自澳大利亚的艺术家&#xff0c;笔名为Hello Angel&#xf…