toRef / toRefs

作用

toReftoRefs 可以用来复制 reactive 里面的属性然后转成 ref,而且它既保留了响应式,也保留了引用,也就是你从 reactive 复制过来的属性进行修改后,除了视图会更新,原有 ractive 里面对应的值也会跟着更新,如果你知道 浅拷贝 的话那么这个引用就很好理解了,它复制的其实就是引用 + 响应式 ref
不加 s 和 加 s 的区别就是这样:

  • toRef: 复制 reactive 里的单个属性并转成 ref
  • toRefs: 复制 reactive 里的所有属性并转成 ref

下面我会为这两个属性举一些使用案例

使用方式

toRef

<template><h2>reactive-greet: {{ info.greet }} </h2><h2>toRef-greet: {{ rGreet }}</h2><button @click="onChangeGreet">更换问候语</button>
</template><script>
import { reactive, toRef } from 'vue'
export default {setup() {let info = reactive({name: 'Tony',greet: 'Hello'})// 复制 info 里的 greet 属性let rGreet = toRef(info, 'greet')// 更改 rGreetconst onChangeGreet = () => {rGreet.value = 'world!'}return {info,rGreet,onChangeGreet}}
}
</script>

效果:

我们可以看到,更改了 rRgeet 也同时更改了原有的 info.greet 属性

toRefs

<template><h2>reactive-info-greet: {{ info.greet }} </h2>// 要带上 .value<h2>toRefs-rInfo-greet: {{ rInfo.greet.value }}</h2><button @click="onChangeGreet">更新</button>
</template><script>
import { reactive, toRefs } from 'vue'
export default {setup() {let info = reactive({name: 'Tony',greet: 'Hello'})// 复制整个 infolet rInfo = toRefs(info)// 更改 rInfo.greetconst onChangeGreet = () => {rInfo.greet.value = 'world!'}return {info,rInfo,onChangeGreet}}
}
</script>

怎么样,是不是很简单,这两个属性作用是一样的,唯一的区别就是访问方式不同

  • template 要想访问 toRefs 的值,需要带上 .value 如果不带上,就会出现双引号。
  • template 要想访问 toRef 的值,不需要带上 .value

可能有的小伙伴会问了,那这两个属性实际应用场景中有啥作用呢?
这个用处可多了,这里简单举一个封装获取计算鼠标移动位置

<template><h2>x: {{ x }}</h2><h2>y: {{ y }}</h2>
</template><script>
import { reactive, toRefs } from 'vue'
export default {setup() {// 封装位置函数function usePosition(state, x, y) {const position = reactive({x: 0,y: 0})// 绑定鼠标移动事件const onMouseMove = (event) => {position.x = event.xposition.y = event.y}window.addEventListener('mousemove', onMouseMove)// 返回出去return toRefs(position)}// 接受 x, y 位置const {x, y} = usePosition()return {x,y}}
}
</script>

我们可以看到,案例中将提前封装好的 usePosition 函数通过 toRefs 返回一个响应式的数据,然后直接拿来就用。

我们还可以将它放到 js 文件里面去,在需要的地方引入进来即可,无需再去重复声明,笔者甚至认为这两属性就是用来避免重复声明 reactive 的。

好了,内容就这么多,喜欢就点个小赞,欢迎有问题的小伙伴到下方评论。

上一篇文章是:Vue3 理解 ref 和 reactive 的用法、区别

Vue3 理解 toRef 和 toRefs 的作用、用法、区别相关推荐

  1. vue3中的ref,toRef,toRefs三个的作用

    1. ref的使用 ref 接受一个原始值,返回一个具有响应式的对象,对象有一个value属性,其值就是所传递的原始值. ref是做的一个拷贝关系,修改对象msg的值,不会影响对象obj,视图会发生变 ...

  2. VUE3 响应式 API 之 toRef 与 toRefs

    相信各位开发者看到这里时,应该已经对 ref 和 reactive API 都有所了解了,为了方便开发者使用, Vue 3 还推出了两个与之相关的 API : toRef 和 toRefs ,都是用于 ...

  3. vue3.0语法糖及ref、reactive、toRef、toRefs的区别

    vue3.0语法糖 前几天一个月薪35k的兄弟,给我推了一个人工智能学习网站,看了一段时间挺有意思的.包括语音识别.机器翻译等从基础到实战都有,很详细,分享给大家. 1.什么是setup语法糖 起初 ...

  4. ref、 reactive、toref、torefs的用法,区别

    ref. reactive.toref.torefs的用法,区别 ref 接受一个内部值并返回一个响应式且可变的 ref 对象.ref 对象仅有一个 .value property,指向该内部值 co ...

  5. C#-深入理解async和await的作用及各种适用场景和用法

    第十五节:深入理解async和await的作用及各种适用场景和用法 一. 同步VS异步 1.   同步 VS 异步 VS 多线程 同步方法:调用时需要等待返回结果,才可以继续往下执行业务 异步方法:调 ...

  6. 敲黑板!vue3重点!一文了解Composition API新特性:ref、toRef、toRefs

    一文了解Composition API新特性:ref.toRef.toRefs 一.

  7. ref、reactive、toRef、toRefs的区别

    vue3.0里给数据添加响应式有很多api可用,有时傻傻分不清,分享一下个人的理解. 一.reactive reactive 用于为对象添加响应式状态. 接收一个js对象作为参数,返回一个具有响应式状 ...

  8. reactive、ref、toRef、toRefs

    reactive和ref 1.reactive 接收的数据类型:对象类型 使用: const data1 = reactive({value: "1",name: "2& ...

  9. 彻底清楚搞懂toRef和toRefs是什么,也许你知道toRef和toRefs,一直有点蒙蔽,一直没搞懂它,看完这篇文章你彻底清楚

    首先我们知道为什么要用toRef和toRefs,这篇文章让你彻底搞懂 比如我们使用 reactive来创建一个对象 <script> import {reactive} from &quo ...

最新文章

  1. Modelsim仿真查看内部信号
  2. ES6 - let、const与作用域
  3. 之前是围棋下不过机器人,这回连打字也不行
  4. linux虚拟机备份树莓派,为树莓派做系统备份镜像(for Linux #038; Mac),
  5. ICMP协议个人分析
  6. 如何使用chevereto自建图床
  7. 1493:物种大交换开创的世界史
  8. 学习游戏服务器编程进阶篇之全球同服技术架构
  9. iso计算机术语简单解释,计算机网络知识(上)
  10. Jersey搭建restFul形式接口
  11. 前沿研究丨李德毅院士:基于驾驶脑的智能驾驶车辆硬件平台架构
  12. 一种通过物理分离实现WSUS伸缩性的方案
  13. 视频压缩编码参考软件代码入门
  14. 王道考研计算机网络学习心得——第一章-计算机网络体系结构
  15. 【数值分析】插值法:拉格朗日插值、牛顿插值
  16. BJDCTF 2nd 刷题记录
  17. 在嵌入式x86上构建我的智能家居(home assistant) (三)
  18. 电脑有网却打不开网页(能ping通)
  19. PHP学习——4 Integer类型
  20. 你盼世界,我盼望你无bug|掘金征文

热门文章

  1. svg 使用path实现圆角效果
  2. 半导体初创企业中的RISC-V
  3. 【processing码绘】简单实现码绘动态图形与拓展
  4. ubuntu 16.10 install 搜狗输入法
  5. asterisk拨号规则(包含匹配规则说明)转
  6. ​燕东微科创板上市:市值276亿 亦庄国投与京东方是股东
  7. 穷人思维」过渡到「富人思维」
  8. 操作系统实现IO的三种方式
  9. OJ sdust Java记录
  10. cdr最新软件下载2023中文版电脑64位免费安装包