Vue3中watch和watchEffect区别和用法

发布于:2025-07-24 ⋅ 阅读:(18) ⋅ 点赞:(0)

使用过 Vue 的小伙伴,不管时 Vue2 还是 Vue3,我相信你都用过 Vue 中的监听器。监听器的作用就和它的名字一样:用来监听某个东西是否发生变化!我们很多需求都会用到监听器 watch,但是 Vue2Vue3 中的监听器的用法有些许不一样,这就让一些从 Vue2Vue3 的小伙伴不太适应,所以,我们今天就来好好学一学 Vue3 中的监听器如何使用!

1.环境准备

为了方便演示和编写代码,我们直接使用 vite 搭建一个 Vue3 的基础项目。

创建命令:

npm create vite@latest my-vite-app --template vue-ts

删除 App.vue 中一些不需要的东西,然后运行项目:

2.watch

2.1 watch 基本使用

Vue3 中的组合式 API 中,watch 的作用和 Vue2 中的 watch 作用是一样的,他们都是用来监听响应式状态发生变化的,当响应式状态发生变化时,都会触发一个回调函数。

代码如下:

<template> 
<img alt="Vue logo" src="./assets/logo.png" /> 
<p>{
  
  { message }}</p> 
<button @click="changeMsg">更改 message</button> 
</template> 
<script setup lang="ts"> 
import { ref, watch } from "vue"; 
const message = ref("小猪课堂"); 
watch(message, (newValue, oldValue) => { 
  console.log("新的值:", newValue); 
  console.log("旧的值:", oldValue); 
}); 
const changeMsg = () => { message.value = "张三"; }; 
</script>

上段代码中我们点击按钮就会更改响应式变量 message 的值。我们又使用 watch 监听器监听了 message 变量,当它发生变化时,就会触发 watch 监听函数中的回调函数,并且回调函数默认接收两个参数:新值和旧值。

注意:当我们第一进入页面时,watch 监听函数的回调函数是不会执行的。

输出结果:

2.2 watch 监听类型

前面我们一直强调 watch 监听的是响应式数据,如果我们监听的数据不是响应式的,那么可能会抛出如下警告:

那么哪些数据是属于响应式的,或者换个说法,watch 监听器可以监听哪些形式的数据呢?

(1)ref 和计算属性

ref 定义的数据我们是可以监听到的,因为我们前面的代码以及证明了。除此之外,计算属性也是可以监听到的,比如下列代码:

const message = ref("小猪课堂"); 
const newMessage = computed(() => { 
  return message.valu

网站公告

今日签到

点亮在社区的每一天
去签到