Vue3中的ref与toRef

回家种地
• 阅读 1756

我们在使用vue3当中的composition api时,我们将一个数据变成可响应式的数据时,我们可能经常用的ref这个api,其实还存在一个toRef,这个api也可以将一个数据变成可响应式的。但是两者也存在着一些不同之处。

ref的用法:

const nameRef = ref('lisa')

toRef的用法:

const obj = { name: 'lisa' }
const nameRef = toRef(obj, 'name')

你会发现toRef是需要传入两个参数,一个是目标对象,一个对象当中的属性名,它的返回结果就是属性名的可响应式数据。

你是否会觉得toRef的使用比ref麻烦许多,并且两者使用的目的是一致的,这个toRef存在就不是很有必要了。

但是,ref的原理是将穿进去的数据进行了拷贝,那就是说如果nameRef.value发生了变化,穿进去的数据是不会发生变化的。

而toRef就不是进行了拷贝操作,而是对其进行引用了,那么当你对nameRef.value的值发生改变的时候,穿进去的数据也会相应的随之发生变化。

而两者还有一个不同之处,那就是toRef的值发生变化,但是UI界面是不会进行重新渲染,反之,使用ref的值发生了变化,UI界面是会进行重新渲染的。

综上所述:
1、ref返回的值发生了变化,原始值不会变化;toRef返回的值发生了变化,原始值会变化。
2、ref返回的值发生了变化,UI界面会进行重新渲染;toRef返回的值发生了变化,UI界面不会进行重新渲染。

点赞
收藏
评论区
推荐文章
晴空闲云 晴空闲云
4年前
vue3中基于script setup语法糖的$refs使用
在用vue3开发项目的时候,需要调用子组件的方法,于是想着用$refs来实现,但是我是使用scriptsetup语法糖,原先vue2的语法已经不适用了。于是一番折腾和查阅资料,终于搞定。vue2语法vue2语法在组件上设置ref属性后,在代码里可以通过this.$refs.ref值访问到对应的子组件。一个设置ref值的组件:html在js代码中可以通
Souleigh ✨ Souleigh ✨
4年前
Vue3 - 响应性API
前言Vue3.x正式版发布已经快半年了,相信大家也多多少少也用Vue3.x开发过项目。那么,我们今天就整理下Vue3.x中的响应性API。响应性APIreactive作用:创建一个响应式数据。本质:传入数据(复杂类型:数组和json对象)包装成一个Proxy对象。如果传入其他对象,默认情况下修改对象,界面不会自动更新,如果想更新,可以通过重新赋值(创建
Jacquelyn38 Jacquelyn38
4年前
从0到1搭建一款页面自适应组件(Vue.js)
组件将根据屏幕比例及当前浏览器窗口大小,自动进行缩放处理。建议在组件内使用百分比搭配flex进行布局,以便于在不同的分辨率下得到较为一致的展示效果。使用前请注意将body的margin设为0,否则会引起计算误差。fullScreenContainer.vue<template<divid"fullscreencontainer":ref"ref
Jacquelyn38 Jacquelyn38
4年前
「快速学习系列」我熬夜整理了Vue3.x响应性API
前言Vue3.x正式版发布已经快半年了,相信大家也多多少少也用Vue3.x开发过项目。那么,我们今天就整理下Vue3.x中的响应性API。响应性APIreactive作用:创建一个响应式数据。本质:传入数据(复杂类型:数组和json对象)包装成一个Proxy对象。如果传入其他对象,默认情况下修改对象,界面不会自动更新,如果想更新,可以通过重新赋值(创建
Jacquelyn38 Jacquelyn38
4年前
「快速学习系列」我熬夜整理了Vue3.x响应性API
前言Vue3.x正式版发布已经快半年了,相信大家也多多少少也用Vue3.x开发过项目。那么,我们今天就整理下Vue3.x中的响应性API。响应性APIreactive作用:创建一个响应式数据。本质:传入数据(复杂类型:数组和json对象)包装成一个Proxy对象。如果传入其他对象,默认情况下修改对象,界面不会自动更新,如果想更新,可以通过重新赋值(创建
Stella981 Stella981
4年前
Spring Data R2DBC 入门
1、介绍R2DBC(ReactiveRelationalDatabaseConnectivity)是在2018年SpringOnePlatform大会被提出来的,它旨在使用完全无阻塞驱动程序创建数据库链接,为SQL数据库创建响应式API。为了探索R2DBC我们将创建一个简单的WebFlux应用实现目标2、项目配置
Easter79 Easter79
4年前
SwiftUI 跨组件数据传递
作者:Cyandev,iOS和MacOS开发者,目前就职于字节跳动0x00前言众所周知,SwiftUI的开发模式与React、Flutter非常相似,即都是声明式UI,由数据驱动(产生)视图,视图也会与数据自动保持同步,框架层会帮你处理“绑定”的问题。在声明式UI中不存在命令式地让一个视图变成xxx
Wesley13 Wesley13
4年前
MySQL Cluster实现SQL&NoSQL组合使用
在MySQLCluster集群,应用数据均保存在数据节点。因此不仅MySQL实例可以对其进行访问,通过NDB的API其他应用也可以访问数据。  利用这个特性,开发者可以实现以下功能:1.进行跨应用的复杂查询2.简单的Key/Value绕过SQL层实现快速读写3.微秒级的实时响应利用以上功能,通过灵活配置应用环境,可提高生产效率和灵活性,在不改动数据库结
回家种地
回家种地
Lv1
要努力呀,为了想要的生活。
文章
3
粉丝
0
获赞
0