vue3 的 ref、 toRef 、 toRefs

2023-11-13

1、ref: 对原始数据进行拷贝。当修改 ref 响应式数据的时候,模版中引用 ref 响应式数据的视图处会发生改变,但原始数据不会发生改变

<template>
  <div>{{refA}}</div>
</template>

<script lang="ts" setup>
import { ref } from 'vue'

let a = 1
const refA = ref(a) // 对原始数据 a 进行拷贝

refA.value = 12 // 此时模版视图引用 refA 的地方进行更新
console.log(a) // 此时原始数据 a 的值还是 1
</script>

2、toRef: 用于将对象中的某个属性转换成响应式数据。当修改 toRef 响应式数据的时候,原始数据会发生变化,但是模版中引用 toRef 响应式数据的视图处不会发生改变

<template>
  <div>{{toRefName}}</div>
</template>

<script lang="ts" setup>
import { toRef } from 'vue'

let obj = { name: 'bobo', age: 18 }
const toRefName = toRef(obj, 'name') // 将原始数据 obj 的 name 属性转换为响应式数据

toRefName.value = 'lili' // 此时模版视图引用 toRefName 的地方不更新
console.log(toRefName.value, obj.name) // 都变成 'lili'
</script>

3、toRefs: 用于将整个对象转换成响应式数据。当修改 toRefs 响应式数据的时候,原始数据会发生变化,但是模版中引用 toRefs 响应式数据的视图处不会发生变化

<template>
  <div>{{toRefsObj.name}} ---- {{toRefsObj.age}}</div>
</template>

<script lang="ts" setup>
import { toRefs } from 'vue'

let obj = { name: 'bobo', age: 18 }
const toRefsObj = toRefs(obj) // 将原始数据 obj 所有属性转换为响应式数据

toRefsObj.name.value = 'lili' // 此时模版视图引用 toRefsObj 属性的地方不更新
toRefsObj.age.value = 16 // 此时模版视图引用 toRefsObj 属性的地方不更新
console.log(toRefsObj.name.value, obj.name) // 都变成 'lili'
console.log(toRefsObj.age.value, obj.age) // 都变成 16
</script>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue3 的 ref、 toRef 、 toRefs 的相关文章

  • 无法将消息发布到服务工作人员,因为控制器值为空

    我正在尝试做一个website https secure depths 31934 herokuapp com 在 Service Worker 的帮助下可以离线使用 以缓存页面所需的文件 我试图让用户控制他希望缓存的图像 为此 我使用一个
  • 使用非常大的背景位置偏移是否存在性能问题?

    我正在构建一个进度条控件 并且正在研究它实际上并不显示进度 而只是旋转 正在发生某事 的指示器的情况 我的设计基本上是交替的对角条纹 本质上是一个像这样的理发杆 但是 旋转 由于希望将尽可能多的负载转移给渲染引擎 我想为此使用 CSS 过渡
  • Javascript:使用 IIFE 和块语句之间的区别

    IIFE主要用于封装作用域 function let myVar 10 not global 但为什么不直接使用块语句呢 let myVar 10 also not global 除了范围封装之外 进一步使用 IIFE 是否还有其他好处 块
  • 多次训练brain.js?

    在第一次训练后 如何将新信息 仅新信息 而不是所有信息 因为这会花费太多性能 训练到我的用 Brain js 制作的神经网络 它有点粗糙 但您可以使用以下结构来实现 如果我们加入 2 个训练数据集 旧数据集与新数据集 然后重新训练keepN
  • 每n秒执行一次函数

    我制作了这个在 10 秒后点击链接的代码片段 function timeout window setTimeout function img left click 1000 setTimeout timeout 1000 timeout 我
  • 在 Cordova 中合并文件的多个部分

    在我的 Cordova 应用程序中 我正在下载任意文件 例如图像或视频文件 这是通过 Cordova 文件传输插件和 Range 标头完成的 因为我需要分段下载文件 我的问题是 我想将几 个小 字节 文件合并回原来的文件中 他们曾经在其中使
  • Twitter Bootstrap - 下拉菜单 - 箭头键不适用于 Firefox 中的输入标签

    要求 我想在带有用户名和密码字段的下拉菜单中放置一个登录表单 我可以做到这一点 除了以下问题之外 一切正常 Issue 打字时我无法使用箭头键 上 下 firefox 当输入位于下拉代码之外时 这很有效 这适用于其他浏览器 例如 googl
  • 为动态加载的 HTML 内容触发 Bootstrap JS 行为

    我正在动态加载包含 Bootstrap 标记的 HTML 模板 但是 Bootstrap Javascript 行为不会应用于加载的内容 例如 如果加载的内容包含 Bootstrap 模式的标记 则该模式将无法正确运行 有没有办法可以触发
  • 个人 Tumblr 帖子上的 Javascript

    我知道您可以编辑在 tumblr 博客上呈现所有帖子博客主页的 html AngularJS 但是 有什么办法可以添加自定义到各个帖子 我想在逐个帖子的基础上做一些 javascript 的东西 但似乎无法找到可以编辑代码的位置 或者 如果
  • 为什么我需要使用 setState 回调来设置依赖于第一个项目的 setState 完成的第二个状态项目的状态?

    在此 componentDidUpdate 方法中 执行 setState 将引号设置为从 fetch 返回的内容后 我必须使用回调再次执行 setState 将 randomQuoteIndex 设置为调用 randomQuoteInde
  • 对使用“new”创建的数组上“map”的行为感到困惑[重复]

    这个问题在这里已经有答案了 我对结果感到困惑mapping 使用创建的数组new function returnsFourteen return 14 var a new Array 4 gt undefined x 4 in Chrome
  • 使用 Javascript/Node.js 在代码内执行 mongoimport

    node js javascript 中是否有任何库可供个人使用mongoimport在代码中 据我了解 mongoimport 有点像 exe 您必须先执行它 然后才能使用其文本输入环境 是否可以在我的代码中执行 mongoimport
  • IE localStorage 事件失火

    在 Internet Explorer 9 和 10 中 localStorage 实现意外地触发事件 这里有很棒的线索 Chrome 的 localStorage 实现存在错误 https stackoverflow com questi
  • 如何使用 TypeScript 接口输入 Vue 提示 props?

    这件事真的让我的头撞到了墙上 我记得在 Angular 工作时 TS 接口可用于输入提示参数 我想对 Vue 中的 props 做同样的事情 有任何想法吗 代码如下 但仅针对标准对象进行检查 因此传入任何对象都是有效的 import Vue
  • Javascript location.href 到 mailto 触发 GET HTTP,该 HTTP 在 Chrome 中被取消

    我有一个按钮可以触发以下 javascript 函数 function sendEmail var mail mailto email protected cdn cgi l email protection location href m
  • 在 Chrome 开发者工具中禁用调试器语句

    我正在尝试对恶意 JavaScript 进行逆向工程 当我最初加载侧面时 会注入 JS 代码 其中包括 debugger 语句并将断点注入我的 chrome 开发人员控制台 通过stackoverflow阅读 禁用所有断点does not帮
  • ES6 静态方法引用 self? [复制]

    这个问题在这里已经有答案了 我有两节课 存储库和用户存储库 我想在 Repository 中定义一个静态方法 该方法在运行时调用 UserRepository 中的静态函数 有什么干净的方法可以做到这一点吗 class Repository
  • highchart堆积柱每个类别的总数据

    我想获取每个类别的总数据 这point stackTotal只给出活动数据的总数 从我粘贴的代码示例中 我想知道每种水果的总消耗量 因此 即使我单击右上角图例上的乔的名字 这使得堆叠图表上的所有乔信息都处于非活动状态 我仍然可以知道约翰 简
  • Array.of 与“[ ]”。何时使用 Array.of 而不是“[ ]”?

    当我发现时我正在读一些书Array of https developer mozilla org en docs Web JavaScript Reference Global Objects Array of 根据 MDN Array o
  • Html5画布最热门的任意形状

    我正在尝试开发可以在画布中渲染图像和文本的程序 我尝试处理画布中图像的点击 但它适用于可矩形图像 我的问题 您是否知道处理单击画布中图像的可见部分 非透明部分 的解决方案或框架 我正在寻找 ActionScript hitTestObjec

随机推荐

  • DHCP设置之起始地址与结束地址

    路由器设置ip地址 subnet mask dhcpstart dhcpend时 后台应该如何判断 get data ipstart websGetVar wp T start T ipend websGetVar wp T end T i
  • do while(0)的作用

    在嵌入式开发的过程中 我们经常可以在一些优秀开源代码的头文件里发现一些宏定义使用了do while 0 语句 也许你会疑惑do while 0 中的代码不就是只执行一次吗 为什么还要多此一举使用do while 0 循环结构去包裹呢 实际上
  • 卷积、池化、激励函数的顺序

    以下内容为个人的看法 顺序 卷积 池化 激励函数 我们知道卷积肯定是在第一层 毕竟 wx b wx b 就是卷积操作 那为什么池化要在激励函数之前呢 原因解析 假设激励函数是 relu 激励函数 并假设我们卷积后的值为 3 2 1 2 对于
  • 【总结】Typescript 结合Vue3的写法

    目录 前言 一 结合写法 1 ref 2 reactive 3 defineProps 4 defineEmits 5 computed 6 事件处理函数 7 html元素引用 8 组件实例 二 拓展补充 1 keyof 操作符 2 typ
  • 把代码做成笔记——Jupyter Notebook

    此文章首发于微信公众号Python for Finance 链接 https mp weixin qq com s KDCmpgwPbvrkRIuojtLpNg 什么是Jupyter Notebook Spyder Spyder代码编辑区
  • [算法]最大子串和

    题目描述 首先有一串数字 共有n个 从n个数中找到连续子序列和的最大值 解法一 暴力破解法 看到这个问题时第一时间想到的就是暴力破解法 遍历所有子序列 最终得到最大值 e g 1 2 3 4 5 6 共有六个数 所有组合为 1 2 3 4
  • Linux Shell编程之数组及参数传递

    1 Shell数组 Bash Shell 只支持一维数组 不支持多维数组 初始化时不需要定义数组大小 数组元素的下标由 0 开始 下标可以是整数或算术表达式 其值应大于或等于 0 1 1 定义数组 语法 数组名 值1 值2 值n 或者 数组
  • vue cli npm run build打生产环境包报错Cannot read property ‘pop‘ of undefined

    问题出在webpack配置的代码拆分splitChunks 解决办法 每个cacheGroups中配置enforce true
  • SpringGateway转发过程

    为什么写 就想看看springgateway的限流咋做的 但是看着看着就想知道转发过程 然后就写了 总之 转发是通过重组请求头header uri等信息建立netty客户端连接的访问过程 Lettuce相较于Jedis有哪些优缺点 Lett
  • LaTeX 常用符号命令大全

    函数 符号及特殊字符 声调 语法 效果 语法 效果 语法 效果 bar x acute eta check alpha grave eta breve a ddot y dot x hat alpha tilde iota 函数 语法 效果
  • 开个坑, 写个阿里云开放储存服务(OSS)的C++版SDK以及客户端

    这应该是继我研究手册QQ协议后的第2个稍微正式一点的网络程序 不只是Scoket套接字编程 还涉及到更多的HTTP协议知识 阿里云开放储存服务OSS官方已经提供了不少SDK 包括PHP Python Java C 但唯独没有C C 的 很可
  • Python 编程进阶经典算法逻辑编程 剑指Offer

    目录 1 找到数组中重复数字 字符 返回出现频次最多 2 给定一个二维数组 其每一行从左到右递增排序 从上到下也是递增排序 给定一个数 判断这个数是否在该二维数组中 3 从尾到头打印链表 4 用两个栈实现队列 5 第n项斐波那契数列 矩形覆
  • java详解动态代理中的代理对象

    相信大家都使用过动态代理 就算没有写过 应该也用过Spring来做过Bean的组织管理 如果使用过Spring 那大多数情况应该已经不知不觉地用到动态代理了 动态代理中所说的 动态 是针对使用Java代码实际编写了代理类的 静态 代理而言的
  • sql和MySQL的语句执行顺序

    sql和mysql执行顺序 发现内部机制是一样的 最大区别是在别名的引用上 一 sql执行顺序 1 from 3 join 2 on 4 where 5 group by 开始使用select中的别名 后面的语句中都可以使用 6 avg s
  • Linux软件安装-rpm详解

    Linux软件安装 rpm详解 在Linux系统中 RPM Red Hat Package Manager 是一种常见的软件包管理器 提供了方便的软件安装 升级和卸载功能 本文将详细介绍rpm的语法 实操和各种方法之间的区别及重点内容 RP
  • Mysql8.0.16在win10的安装以及navicat连接

    Mysql8 0 16在win10的安装以及navicat连接 一 安装过程 1 去mysql官网下载适合自己电脑的版本https www mysql com downloads 进入官网 官网下载极慢 建议下载个迅雷 复制链接到迅雷 体验
  • 拥抱数字经济 商用终端成为企业“必需品”

    随着各行业数字化转型进程的不断推进 英特尔作为商用终端领域的 领路人 将继续联手生态伙伴推动商用领域生产工具的变革 赋能广大企业 机构用户最终实现业务创新和产业升级 助力中国经济高质量发展和数字中国建设 作者 贾贵鹏 来源 天极网 近年来
  • Uboot启动参数说明

    29 Uboot 启动参数说明 bootcmd cp b 0xc4200000 0x7fc0 0x200000 bootm 倒计时到 0 以后 自动执行的指令 bootdelay 2 baudrate 38400 串口波特率 一般使用 38
  • Springboot实现MQTT通信

    目录 一 MQTT简介 1 MQTT协议 2 MQTT协议特点 二 MQTT服务器搭建 三 使用Springboot整合MQTT协议 1 在父工程下创建一个Springboot项目作为消息的提供者 1 1 导入依赖包 1 2 修改配置文件
  • vue3 的 ref、 toRef 、 toRefs

    1 ref 对原始数据进行拷贝 当修改 ref 响应式数据的时候 模版中引用 ref 响应式数据的视图处会发生改变 但原始数据不会发生改变