watch和watchEffect的不同点

150 阅读2分钟

一、watch

watch是Vue.js提供的一个API,它可以用来监听数据对象、嵌套属性或者数组中某个元素的变化。watch有以下几个特点:

  1. 需要明确指定需要监听的数据对象或者属性值。

  2. 需要手动触发回调函数,也就是说仅当监听的数据发生改变时才会执行回调函数。

下面是一个使用watch监听数据变化的例子:

data() {
  return {
    message: 'Hello Vue.js!'
  }
},
watch: {
  message: function(newVal, oldVal) {
    console.log('new value:', newVal)
    console.log('old value:', oldVal)
  }
}

在上述代码中,我们定义了一个data对象,其中包含一个message属性。接着,我们通过watch API来监听message属性的变化,并在message发生变化时打印出新旧值。

二、watchEffect

watchEffect是Vue.js 3.0引入的新API,它可以用来监听响应式数据的变化,并在每次变化后自动执行回调函数。相比watch,watchEffect有以下几个特点:

  1. 不需要明确指定需要监听的数据对象或者属性值,watchEffect会自动检测响应式数据的变化。

  2. 在监听到数据变化后,watchEffect会立即执行回调函数,不需要手动触发。

下面是一个使用watchEffect监听数据变化的例子:

import { watchEffect, reactive } from 'vue'

const state = reactive({
  message: 'Hello Vue.js!'
})

watchEffect(() => {
  console.log('message:', state.message)
})

在上述代码中,我们定义了一个state对象,并使用reactive API将其转换为响应式数据。接着,我们通过watchEffect来监听state对象中某个属性的变化,并在每次变化后打印出新的属性值。

三、watch和watchEffect的区别

  1. 使用方式不同

watch需要明确指定需要监听的数据对象或者属性值,而watchEffect会自动检测响应式数据的变化。

  1. 执行时机不同

watch需要手动触发回调函数,也就是说仅当监听的数据发生改变时才会执行回调函数;而watchEffect会立即执行回调函数,并在每次数据变化后再次执行。

  1. 功能不同

watch可以用来监听对象、嵌套属性或者数组中某个元素的变化,并在数据变化后执行回调函数;而watchEffect则可以监听任意响应式数据的变化,并在每次变化后自动执行回调函数。

四、总结

watch和watchEffect都是Vue.js提供的用于监听数据变化的API,它们虽然有些相似,但在使用方式、执行时机和功能方面还是存在一定的区别。通常来说,如果我们需要监听某个具体的属性或者对象,可以使用watch;而如果我们需要监听任意响应式数据的变化,并在每次变化后自动执行回调函数,可以使用watchEffect。