当前位置: 首页 > news >正文

Vue2/Vue3分别如何使用Watch

在 Vue 2 和 Vue 3 中,watch 用于监听数据的变化并执行相应的逻辑。虽然两者的核心功能相同,但在语法和使用方式上有一些区别。以下是 Vue 2 和 Vue 3 中使用 watch 的详细说明:

Vue 2 中的 watch

在 Vue 2 中,watch 是通过选项式 API 实现的,通常在组件的 watch 选项中定义。

【基本用法】

export default {data() {return {message: 'Hello Vue 2',count: 0,};},watch: {// 监听 message 的变化message(newVal, oldVal) {console.log('message changed:', newVal, oldVal);},// 监听 count 的变化count(newVal, oldVal) {console.log('count changed:', newVal, oldVal);},},
};

【监听对象属性】
如果需要监听对象的某个属性,可以使用字符串形式的键名:

export default {data() {return {user: {name: 'Alice',age: 25,},};},watch: {'user.name'(newVal, oldVal) {console.log('user.name changed:', newVal, oldVal);},},
};

【深度监听】
如果需要监听对象或数组内部的变化,可以设置 deep: true:

export default {data() {return {user: {name: 'Alice',age: 25,},};},watch: {user: {handler(newVal, oldVal) {console.log('user changed:', newVal, oldVal);},deep: true, // 深度监听},},
};

【立即执行】
如果需要监听器在创建时立即执行一次,可以设置 immediate: true:

export default {data() {return {message: 'Hello Vue 2',};},watch: {message: {handler(newVal, oldVal) {console.log('message changed:', newVal, oldVal);},immediate: true, // 立即执行},},
};

Vue3中的watch

在 Vue 3 中,watch 是通过 Composition API 实现的,使用 watch 函数来定义监听器。
【基本用法】

import { ref, watch } from 'vue';export default {setup() {const message = ref('Hello Vue 3');const count = ref(0);// 监听 message 的变化watch(message, (newVal, oldVal) => {console.log('message changed:', newVal, oldVal);});// 监听 count 的变化watch(count, (newVal, oldVal) => {console.log('count changed:', newVal, oldVal);});return {message,count,};},
};

【监听多个数据】

import { ref, watch } from 'vue';export default {setup() {const firstName = ref('Alice');const lastName = ref('Smith');// 监听 firstName 和 lastName 的变化watch([firstName, lastName], ([newFirstName, newLastName], [oldFirstName, oldLastName]) => {console.log('firstName or lastName changed:', newFirstName, newLastName);});return {firstName,lastName,};},
};

【监听对象属性】

import { ref, watch } from 'vue';export default {setup() {const user = ref({name: 'Alice',age: 25,});// 监听 user.name 的变化watch(() => user.value.name,(newVal, oldVal) => {console.log('user.name changed:', newVal, oldVal);});return {user,};},
};

【深度监听】
在 Vue 3 中,默认情况下 watch 是浅层的。如果需要深度监听,可以设置 { deep: true }:

import { ref, watch } from 'vue';export default {setup() {const user = ref({name: 'Alice',age: 25,});// 深度监听 user 对象watch(user,(newVal, oldVal) => {console.log('user changed:', newVal, oldVal);},{ deep: true });return {user,};},
};

【立即执行】
如果需要监听器在创建时立即执行一次,可以设置 { immediate: true }:

import { ref, watch } from 'vue';export default {setup() {const message = ref('Hello Vue 3');// 立即执行监听器watch(message,(newVal, oldVal) => {console.log('message changed:', newVal, oldVal);},{ immediate: true });return {message,};},
};
http://www.lryc.cn/news/536624.html

相关文章:

  • C++从入门到实战(四)C++引用与inline,nullptr
  • Linux库制作与原理:【静态库】【动态库】【目标文件】【ELF文件】【ELF从形成到假造轮廓】【理解链接和加载】
  • 项目BUG
  • wordpress部署nginx版的
  • 【鸿蒙Next】优秀鸿蒙博客集锦
  • 【第2章:神经网络基础与实现——2.1 前馈神经网络的结构与工作原理】
  • python-leetcode-阶乘后的零
  • Python:学生管理系统(继承性、多态性)。
  • 网络安全RSA加密
  • Vue学习笔记4
  • mariadb数据库的安装与部署
  • 单调队列与栈
  • Matlab 多项式曲线拟合(三维)
  • 机器翻译同样的文本,是从英语翻译成日语更准确还是中文翻译成日语更准确
  • MAC 系统关屏幕后电量消耗极快 Wake Requests
  • golangAPI调用deepseek
  • 提供可传递的易受攻击的依赖项
  • 2.14学习记录
  • xpath定位--鼠标悬停显示的按钮
  • 鸿蒙Harmony打包脚本使用整理
  • 【C语言】C语言 停车场管理系统的设计与实现(源码)【独一无二】
  • 在Autonomous DB中创建训练数据集
  • Adapting to Length Shift: FlexiLength Network for Trajectory Prediction
  • 张量循环运算:内存溢出原因及解决
  • 【Qt】:概述(下载安装、认识 QT Creator)
  • 11、《Web开发性能优化:静态资源处理与缓存控制深度解析》
  • 【Linux】多线程 -> 从线程概念到线程控制
  • 用什么办法能实现ubuntu里面运行的自己开发的python程序能自动升级。
  • java处理pgsql的text[]类型数据问题
  • LeetCode 热门100题-字母异位词分组