vue3的shallowRef和shallowReactive
vue3的shallowRef和shallowReactive
reactive用来包装一个对象,使其每个对象属性都具有响应性,但是这个包装过程是递归调用的,如果包装的对象有过多属性而又不需要设置相应,无疑是性能浪费
针对这种情况vue设置了shallowReactive shallowRef
两个方法来包装响应式数据,通过该方法包装的数据只有第一层具有响应性
shallowReactive
和reactive
一样,该方法只能把对象或数组包装为响应式对象
1 | <template> |
通过change
方法改变了test
的深层属性,这时会发现控制台中打印的数据是改变后的,而浏览器视图中仍然是原来的对象,而如果把change
改成修改test
的第一层属性,则会触发视图的更新
1 | function change() { |
shallowRef
该方法就可以包装对象和基础类型的数据了,不过包装基础属性的数据和普通的ref
没有区别,这里就只说说包装对象时的用法
1 | <template> |
和shallowReactive
不同,这里修改了对象的第一层属性不会触发视图更新,shallowRef
的第一层数据实际指的是包装的整个数据,所以改成这样
1 | function change() { |
vue就会响应数据的更新了
triggerRef
shallowRef
数据被改变后如果要同步到视图上,可以调用一次triggerRef
函数,该函数接收shallowRef
数据,并会把该数据同步到视图上
1 | const test = shallowRef({ |
通过调用一次该方法,两个数据都会被同步
总结:
可以在通过ref
获得dom元素时使用来去掉不必要的监听,节省性能
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 梦志博!
评论