ref用来处理基本类型数据, reactive用来处理对象(递归深度响应式)
如果用ref对象/数组, 内部会自动将对象/数组转换为reactive的代理对象
ref内部: 通过给value属性添加getter/setter来实现对数据的劫持
reactive内部: 通过使用Proxy来实现对对象内部所有数据的劫持, 并通过Reflect操作对象内部数据
<template>
<h2>reactive与ref-细节</h2>
<h3>m1:{{m1}}</h3>
<h3>m2:{{m2}}</h3>
<h3>m3:{{m3}}</h3>
<hr color="red" />
<button @click="update">更新数据</button>
</template>
<script>
import { defineComponent, reactive, ref } from 'vue'
export default defineComponent({
name: 'App',
setup() {
// 用来定义基本类型的响应式数据
const m1 = ref('abc')
// 用来定义复杂类型的响应式数
const m2 = reactive({
name: '小强',
wife: {
name: '小甜甜'
}
})
const m3 = ref({
name: '小强',
wife: {
name: '小甜甜'
}
})
console.log(m3)
// 更新数据的方法
const update = () => {
// console.log('哈哈')
// m1.value+='===' // 可以正常渲染---响应式的数据
// m2.wife.name+='=====' // 同上
console.log(m1)
m3.value.wife.name+='====='
}
return {
m1,
m2,
m3,
update
}
}
})
// ref中可以放入复杂类型的数据,返回来的数据是Ref类型的,但是内部的数据已经成为Proxy类型的代理对象数据
</script>
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69917895/viewspace-2966809/ ,如需转载,请注明出处,否则将追究法律责任。