What is the difference between ref, toRef and toRefs(ref、toRef和toRef之间有什么区别)
问题描述
我刚刚开始使用Vue 3和合成API。
我想知道ref
、toRef
和toRefs
有什么区别?
推荐答案
版本3ref
Aref是Vue 3中的反应性机制,其思想是将非对象包装在reactive
对象中:
获取一个内部值并返回一个反应性和可变的ref对象。REF对象有一个指向内部值的属性
.value
。
嗯..为什么?
在JavaScript(和许多OOP语言)中,有两种变量:值和引用。
值变量:
如果变量x
包含类似10
的值,则它是值变量。如果要将x
复制到y
,则只复制值。将来对x
所做的任何更改都不会更改y
。
引用变量:但如果x
包含对象,则它是引用变量。有了这些,y
的属性会在x
的属性更改时发生更改,因为它们都是引用相同的对象。(如果这让人吃惊,请使用vanilla JavaScript测试这一点。)
因此,这使得引用变量在某种意义上更动态,对反应性更有用,因为任何更改都可以很容易地反映在应用程序中的任何位置。即使对于简单的值变量,VUE也希望利用此功能,因此ref
将这些变量包装在一个对象中,从而创建一个引用变量。
reactive
对于对象变量,不需要引用包装,因为它已经是引用类型。它只需要Vue的reactive功能(ref也有):
const state = reactive({
foo: 1,
bar: 2
})
但此对象的属性可能包含值而不是引用。如果将Value属性直接复制到另一个位置,则副本将失去与对象的连接及其反应性。这就是toRef
有用的地方。
toRef
toRef
将单个reactive
对象属性转换为维护其与父对象的连接的ref
:
const state = reactive({ foo: 1, bar: 2 }) const fooRef = toRef(state, 'foo') /* fooRef: Ref<number>, */
toRefs
toRefs
将所有属性转换为属性为refs:
const state = reactive({ foo: 1, bar: 2 }) const stateAsRefs = toRefs(state) /* { foo: Ref<number>, bar: Ref<number> } */
这篇关于ref、toRef和toRef之间有什么区别的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:ref、toRef和toRef之间有什么区别
基础教程推荐
- 在 JS 中获取客户端时区(不是 GMT 偏移量) 2022-01-01
- 当用户滚动离开时如何暂停 youtube 嵌入 2022-01-01
- Karma-Jasmine:如何正确监视 Modal? 2022-01-01
- 角度Apollo设置WatchQuery结果为可用变量 2022-01-01
- 有没有办法使用OpenLayers更改OpenStreetMap中某些要素 2022-09-06
- 悬停时滑动输入并停留几秒钟 2022-01-01
- 在for循环中使用setTimeout 2022-01-01
- 我什么时候应该在导入时使用方括号 2022-01-01
- 响应更改 div 大小保持纵横比 2022-01-01
- 动态更新多个选择框 2022-01-01