Vue3 Composition API watch函数使用教程

栏目: Vue 发布时间:2024-11-01

Vue 3 的 Composition API 引入了 watch 函数,用于观察一个或多个响应式数据,并在数据发生变化时执行相应的回调函数。以下是一个 watch 的使用教程:

  1. 导入必要的模块

首先,你需要从 'vue' 中导入 watchreactive(如果你正在使用响应式对象)。

import { watch, reactive } from 'vue';
  1. 创建响应式数据

使用 reactive 函数来创建一个响应式对象。

const data = reactive({
  count: 0,
  name: 'John'
});
  1. 使用 watch

watch 函数接受两个参数:第一个参数是你要观察的响应式引用或返回响应式引用的函数,第二个参数是当观察的数据发生变化时要执行的回调函数。

观察单个数据

watch(data.count, (newValue, oldValue) => {
  console.log(`Count changed from ${oldValue} to ${newValue}`);
});

// 修改数据以触发 watch
data.count++; // 输出: "Count changed from 0 to 1"

观察多个数据

你可以使用数组来同时观察多个响应式引用。当数组中的任何一个引用发生变化时,回调函数都会被触发。

watch([data.count, data.name], (newValues, oldValues) => {
  console.log(`Count: ${newValues[0]}, Name: ${newValues[1]}`);
  console.log(`Old Count: ${oldValues[0]}, Old Name: ${oldValues[1]}`);
});

// 修改数据以触发 watch
data.count++; // 输出与上面类似的信息
data.name = 'Doe'; // 也会触发上述的回调函数

观察计算属性

你也可以观察一个返回响应式引用的函数(这通常用于计算属性)。

watch(() => data.count * 2, (newValue, oldValue) => {
  console.log(`Doubled count changed from ${oldValue} to ${newValue}`);
});

// 修改数据以触发 watch
data.count++; // 输出: "Doubled count changed from 0 to 2"

观察 props 属性

import { watch } from 'vue'
const props = defineProps({
  show: {
    type: Boolean,
    default: false
  }
})

// 监听props中show属性变化
watch(
  () => props.show,
  newVal => {
    console.log('newVal', newVal)
  }
)
  1. 停止监听

watch 函数返回一个 StopHandle,你可以调用这个 StopHandle 来停止监听。

const stopWatching = watch(data.count, (newValue, oldValue) => {
  // ...
});

// 停止监听
stopWatching();
  1. 立即执行

默认情况下,watch 只在数据变化后执行。如果你想在初始时立即执行回调函数,可以传递一个选项对象作为 watch 的第三个参数,并设置其 immediate 属性为 true。但请注意,Vue 3 的 watch 已经移除了这个选项,如果你需要立即执行,可以考虑使用 watchEffect

希望这个教程对你有所帮助!

本文地址:https://www.tides.cn/p_vue-vue3-watch