[vue3新特性] 12.组合api——13.toRef和toRefs

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[vue3新特性] 12.组合api——13.toRef和toRefs相关的知识,希望对你有一定的参考价值。

参考技术A

toRef和toRefs可以理解为给 一个响应式对象 的一个或多个 属性创建ref对象 。ref的值会和响应式对象的值保持同步。
区别就是toRef是创建一个,toRefs是一下创建多个。
响应式对象可以是我们用reactive创建的对象,或者是setup函数中参数props。

我们还是通过例子来学习,
首先我们创建一个响应式的对象,

现在我们打印一下age:

输出结果是:

它是一个单纯的数字类型

使用toRef函数,我们可以根据age这个属性,创建一个ref对象:

这时候,我们打印的就是一个ref对象了

使用.value获取到age的值:

同时,不管是修改原来响应式对象,还是修改ref对象的值,它们都会同步修改:

那么把一个普通的属性转化为ref对象有什么用呢?
我们在使用复合函数,useFunc()给这样的函数传参数时,不要使用简单的类型,要使用ref对象

官网没说为什么这么做,我认为是因为函数参数值传递的特性。有兴趣的小伙伴可以搜一下。

跟toRef最大的区别就是toRefs创建的是一个对象,里面每个值都是ref对象,也就是一下子创建对个ref对象。
打印对比一下,就特别明显了,我们先来打印下一原来的响应式对象:

打印的是一个Proxy对象

里面有两个属性,name和age

然后我们使用toRefs创建一个对象

结果:

我们看到dataRefs其实是一个普通对象,它里面有两个属性name和age,但是这两个属性都是ref对象。
更上面一样,它们值改变的话都是保持同步,我就不举例子了。
那toRefs有什么用?
如果我们直接解构响应式对象,那么解构出来的变量没有响应性

打印出来的结果name只是普通的字符串,age只是普通的数字类型,所以这两个变量就没有响应性了,
如果我们希望保持响应性,那就先调用toRefs,再解构:

这样,name和age是两个ref对象:

就会保持响应性了。
这又有什么用?
比如我的data对象上面有好多属性,都要显示在模板中:

显示结果是:

我们可以看到,模板里写了好多data.,因为我们的数据都在data对象下面,这时候就可以用toRefs,然后给它解构了:

这样模板就简洁多了

这节课就到这里了,记住toRef和toRefs的作用就是创建ref对象就可以了。

以上是关于[vue3新特性] 12.组合api——13.toRef和toRefs的主要内容,如果未能解决你的问题,请参考以下文章

vue3组合式API之setup()介绍与reactive()函数的使用

Vue3基础知识总结

Vue3基础知识总结

Vue3基础知识总结

Vue3新特性——Composition API详解

敲黑板!vue3重点!一文了解Composition API新特性:reftoReftoRefs