这是我参与11月更文挑战的第23天,活动详情查看:2021最后一次更文挑战
shallowReactive 与shallowRef
shallowReactive:只处理对象外层属性的响应式(浅响应式)
shallowRef:只处理基本数据类型的响应式,不进行对象的响应式处理
什么时候用?
如果有一个对象数据,结构比较深,但变化时只是最外层属性变化===>shallowReactive 如果有一个对象数据,后续功能不会修改该对象中的属性,而是新的对象来替换===>shallowRef
js:
...
setup() {
let a = ref(0)
let b = shallowRef(0)
let c = reactive({
name: 'liudan',
job: {
salary: 70,
},
})
let d = shallowReactive({
salary: 70,
job: {
salary: 70,
},
})
return {
a,
b,
c,
d,
}
},
html:
我们来到页面上看看效果:
我们分别点击按钮,可以看到,a、b、c变量都实现了响应式,点击最后d按钮的时候,d变量中的salary没有变化,这个是因为shallow只响应表层结构,但是,当我点了几下d按钮,再回去点c按钮的时候,发现d变量中的salary值居然是跟着一起变了,之前点的几下没有加上的现在一起加上了,比如,你点了3下d按钮d变量没有变化,但之后去点一下c按钮,就会发现,d按钮中的salary值变成了73,这个情况也同样发生在用shallowRef定义的深层次对象上,很想问问有没有懂的,跟我解释一下,这跟官方的说明不是很一致
我们来打印一下定义的变量
控制台输出:
可以看到,用shallowRef定义一个对象的时候,value属性中的值不再是proxy对象,也不是数字,他是一个Object对象,不具备响应式,所以这也就是最开始说的shallowRef只处理基本数据类型的响应式,不进行对象的响应式处理