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定义时值修改导致的响应式丢失问题