Vue3 理解 toRef 和 toRefs 的作用、用法、区别
toRef / toRefs
作用
toRef
和 toRefs
可以用来复制 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 的作用、用法、区别相关推荐
- vue3中的ref,toRef,toRefs三个的作用
1. ref的使用 ref 接受一个原始值,返回一个具有响应式的对象,对象有一个value属性,其值就是所传递的原始值. ref是做的一个拷贝关系,修改对象msg的值,不会影响对象obj,视图会发生变 ...
- VUE3 响应式 API 之 toRef 与 toRefs
相信各位开发者看到这里时,应该已经对 ref 和 reactive API 都有所了解了,为了方便开发者使用, Vue 3 还推出了两个与之相关的 API : toRef 和 toRefs ,都是用于 ...
- vue3.0语法糖及ref、reactive、toRef、toRefs的区别
vue3.0语法糖 前几天一个月薪35k的兄弟,给我推了一个人工智能学习网站,看了一段时间挺有意思的.包括语音识别.机器翻译等从基础到实战都有,很详细,分享给大家. 1.什么是setup语法糖 起初 ...
- ref、 reactive、toref、torefs的用法,区别
ref. reactive.toref.torefs的用法,区别 ref 接受一个内部值并返回一个响应式且可变的 ref 对象.ref 对象仅有一个 .value property,指向该内部值 co ...
- C#-深入理解async和await的作用及各种适用场景和用法
第十五节:深入理解async和await的作用及各种适用场景和用法 一. 同步VS异步 1. 同步 VS 异步 VS 多线程 同步方法:调用时需要等待返回结果,才可以继续往下执行业务 异步方法:调 ...
- 敲黑板!vue3重点!一文了解Composition API新特性:ref、toRef、toRefs
一文了解Composition API新特性:ref.toRef.toRefs 一.
- ref、reactive、toRef、toRefs的区别
vue3.0里给数据添加响应式有很多api可用,有时傻傻分不清,分享一下个人的理解. 一.reactive reactive 用于为对象添加响应式状态. 接收一个js对象作为参数,返回一个具有响应式状 ...
- reactive、ref、toRef、toRefs
reactive和ref 1.reactive 接收的数据类型:对象类型 使用: const data1 = reactive({value: "1",name: "2& ...
- 彻底清楚搞懂toRef和toRefs是什么,也许你知道toRef和toRefs,一直有点蒙蔽,一直没搞懂它,看完这篇文章你彻底清楚
首先我们知道为什么要用toRef和toRefs,这篇文章让你彻底搞懂 比如我们使用 reactive来创建一个对象 <script> import {reactive} from &quo ...
最新文章
- Modelsim仿真查看内部信号
- ES6 - let、const与作用域
- 之前是围棋下不过机器人,这回连打字也不行
- linux虚拟机备份树莓派,为树莓派做系统备份镜像(for Linux #038; Mac),
- ICMP协议个人分析
- 如何使用chevereto自建图床
- 1493:物种大交换开创的世界史
- 学习游戏服务器编程进阶篇之全球同服技术架构
- iso计算机术语简单解释,计算机网络知识(上)
- Jersey搭建restFul形式接口
- 前沿研究丨李德毅院士:基于驾驶脑的智能驾驶车辆硬件平台架构
- 一种通过物理分离实现WSUS伸缩性的方案
- 视频压缩编码参考软件代码入门
- 王道考研计算机网络学习心得——第一章-计算机网络体系结构
- 【数值分析】插值法:拉格朗日插值、牛顿插值
- BJDCTF 2nd 刷题记录
- 在嵌入式x86上构建我的智能家居(home assistant) (三)
- 电脑有网却打不开网页(能ping通)
- PHP学习——4 Integer类型
- 你盼世界,我盼望你无bug|掘金征文