vue3 shallowRef和shallowReactive
shallowReative与shallowRef在某些特殊的应用场景下,是可以提升性能的,前者针对对象,用于浅层作用的响应式数据处理,而后者只处理基本数据类型的响应式,不进行对象的响应式处理。
·
shallowRef()
shallowRef是ref() 的浅层作用形式
如果传入基本数据类型,那么shallowRef与ref的作用基本没有什么区别,也就是浅层的ref的内部值将会原样的存储和暴露,并不会被深层递归地转为响应式,只有对 .value 的访问是响应式的。也就是shallowRef只处理基本数据类型的响应式,不进行对象的响应式处理
const state = shallowRef({ count: 1 })
// 不会触发更改
state.value.count = 2
// 会触发更改
state.value = { count: 2 }
shallowReactive()
shallowReactive是reactive() 的浅层作用形式
浅层作用的响应式数据处理,也就是只处理第一层对象的数据,在往下嵌套的数据,操作数据是不起作用的
只考虑对象第一层的数据响应式,在第一层嵌套下的数据不考虑
与reactive()不同,没有深层及的转换,一个浅层响应式对象里只有根级别的属性是响应式的,属性的值会被原样存储和暴露,这意味着值为ref的属性不会被自动解构的
const state = shallowReactive({
foo: 1,
nested: {
bar: 2
}
})
// 更改状态自身的属性是响应式的
state.foo++
// ...但下层嵌套对象不会被转为响应式
isReactive(state.nested) // false
// 不是响应式的
state.nested.bar++
性能优化
具体应用场景:
如果有一个对象数据,后续功能不会修改该对象中的属性,而是生新的对象来替换,那么就可以用shallowRef
如果有一个对象数据,数据结构比较深,复杂,但变化时只需要外层属性变化,那么就可以使用shallowReactive
总结
shallowReative与shallowRef在某些特殊的应用场景下,是可以提升性能的,前者针对对象,用于浅层作用的响应式数据处理,而后者只处理基本数据类型的响应式,不进行对象的响应式处理。
更多推荐
已为社区贡献6条内容
所有评论(0)