Vue.js中的watch和computed都是响应式数据的使用方式,但在Vue 2和Vue 3中它们有一些关键区别:
-
响应性核心实现不同:Vue 2中的响应性系统基于Object.defineProperty,而Vue 3则使用了ES6 Proxy代理对象作为响应性系统的核心实现。这意味着在Vue 3中,可以更轻松地跟踪对象属性的添加/删除,以及数组元素的变化。
-
computed返回值缓存策略:在Vue 2中,computed默认会对计算出的值进行缓存,只有依赖的数据发生变化时才会重新计算;而在Vue 3中,默认情况下,computed返回的值也会进行缓存,但是可以通过设置computed选项的“cache”属性为false来禁用缓存,或者使用新的“ref”和“reactive”API手动控制缓存行为。
-
watch的写法差异:在Vue 2中,watch可以直接监听一个表达式或一个函数,并且提供了deep选项来深度监听对象内部属性的变化;而在Vue 3中,watch需要使用特定的监听选项函数来监听响应式数据的变化,例如使用“immediate”选项来立即执行watch回调函数,或使用“flush”选项来设置watch回调函数在视图更新前或后执行。
总之,在Vue 3中,由于响应性核心实现的变化和新的API的引入,computed和watch的使用方式都有了一些微调,但它们的基本功能和作用并没有改变。