watchEffect
watchEffect()
方法接收一个函数对象作为参数,就会立即执行这个函数,同时也会响应式地跟踪这个依赖是否发生改变,如果发生改变会重新运行。这个方法和watch
很相似。不同的是这个方法不需要分离去监听数据源。vue3中听提供的watch方法和vue2中提供的watch方法是一样的。如果我们处理一个比较大的响应式对象的属性时,我们可以使用es6中的结构语法获取其属性。该组件如果是在组件的setup
函数或者生命周期钩子中被调用时,监听器会在组件卸载时停止监听。同时该方法也会返回一个停止句柄用来停止监听器。我们需要注意的是当该方法执行异步副作用,失效时是需要清理这些副作用的。这个方法还可以接收一个函数,这个函数为onInvalidate()
函数。这个函数会注册一个无效回调,这个回调会在副作用将再次运作或者监听器被停止时被调用。
const x = watchEffect(() => {
// 省略
})
x();
computed
computed
主要用来创建依赖于其他状态的计算属性,接收的是一个getter
函数。并且返回是一个不可变响应式地ref
对象。这个方法也可以接收一个get()
和set()
对象用来创建ref
对象。
watch
vue3中的watch和vue2中的this.$watch()
是一样的意思。需要是监听特定的数据源,默认情况下只有数据源发生改变的时候才会执行。除此之外还有其他的作用,其中有惰性执行副作用,在具体说明中触发监听器和访问被监听状态的前一个值和当前值。监听的数据源可以是返回值的getter
函数也可以是ref
对象。
组合API可以结合生命周期的钩子去使用,其中生命周期的钩子就是在生命周期的基础上多了一个on
。组件API也不需要依赖任何this
,只需要依赖参数和全局导入的Vue API
。我们使用的是时候将组件导出为函数,就可以在任何位置上去使用。导出的组件还可以实现扩展功能。组合式API有很多使用好处,比如我们可以知道模板属性是从哪里来的。而且组合函数返回的值是可以任意命名的,不会出现命名冲突。也不需要因为逻辑重复从而创建多余的实例。