vue3中的ref和reactive

文章类型:Vue

发布者:admin

发布时间:2023-03-26

ref和reactive都是V3中实现构造响应式数据的,

一:ref

1:接收内部值(inner value)返回响应式Ref对象,

2:通常用于处理单值的响应式

3:主要解决原始值的响应式问题

4:返回的响应式数据在JS中使用需要加上.value才能访问其值。视图中自动脱落.value

5:可以接收对象或数组等非原始值,依然是reactive实现响应式;

6:内部封装一个RefImpl类,并设置get value/set value,拦截对值的访问,实现响应式

const count = ref(0)
console.log(count.value) // 0

二:reactive

1:返回响应式代理对象

2:用于处理对象类型的数据响应式

3:reactive接收Ref对象会自动脱ref,使用展开运算符(...)会失去响应性,结合toRefs()将值转换为Ref对象之后再展开

4:内部使用Proxy代理传入对象并拦截该对象各种操作

5:定义基本类型会报警告

const obj = reactive({ count: 0 })
obj.count++

三:总结

1:ref定义基本类型和引用类型,reactive定义引用类型

2:reactive内部是通过ES6的Proxy实现响应式的,不适用于基本数据类型

3:ref定义对象时,底层会通过reactive转换成具有深层次的响应式对象,本质上是reactive的再封装

4:在脚本里使用ref定义的数据时,记得加.value后缀

5:在定义数组时,建议使用ref,可避免reactive定义时值修改导致的响应式丢失问题