vue3中ref和reactive的区别

Posted 木木格里

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue3中ref和reactive的区别相关的知识,希望对你有一定的参考价值。

ref

接受一个内部值并返回一个响应式且可变的 ref 对象,有一个 .value 属性,可以通过其读取/修改对象的值。

const active = ref(false)

console.log(active.value) // false

active.value = true

console.log(active.value) // true

为ref值指定泛型参数覆盖默认推断类型:

const active = ref<boolean> (false)

当值的类型不确定时,将ref 转换为 Ref<T>

const data = ref(params) as Ref<T>

reactive

创建一个响应式对象,与ref不同的是,reactive 接受的参数是一个对象,可以使用toRef(infoObj)为对象中的每一个属性创建一个ref, 它可以保持对原属性的响应式链接。

const infoObj = reactive(
name:'Alex',
age: '22'
)

console.log('infoObj', infoObj)

// 第二个参数代表对name属性创建ref; 对所有属性创建ref 使用toRefs(),结果对象的每个 property 都是指向原始对象相应 property 的 ref。
const infoName = toRef(infoObj, 'name')

infoName.value = 'Mary'

console.log('name', infoName.value, infoObj.name) // name Mary Mary

ref 和 reactive:

相同:创建一个响应式对象。

不同:

  • reactive 接受入参必须是对象形式,而 ref 可以是对象形式,也可以是一个单值。
  • 读取/赋值不一样,ref 必须从.value 属性中读取值
  • ref存在异步问题、

 

toRef 和 toRefs :

toRefs 只会为源对象中包含的 property 生成 ref, 将对象转换为普通对象,且不丢失对源对象的响应式链接,即修改源对象属性值,生成的新的普通对象的对应属性值(ref)也会修改,反之亦然。

toRef 为特定的 property 创建 ref, 同样也会保持响应式链接。

以上是关于vue3中ref和reactive的区别的主要内容,如果未能解决你的问题,请参考以下文章

Vue3 ref和reactive的使用和区别以及响应式原理

Vue3 ref和reactive函数的使用和区别以及响应式

初识vue3-setup语法糖,ref和reactive语法,computde计算属性,watch开启监听

2-3-3 Vue3 Reactive的值:Ref和Reactive

Vue3全家桶升级指南二reftoReftoRefs的区别

refreactivetoReftoRefs的作用与区别(Vue3学习记录)