vue3的watch用法

article/2025/6/20 6:40:41

<template><div class="container mx-auto p-4"><h1 class="text-2xl font-bold mb-4">Vue 3 Watch 示例</h1><div class="grid grid-cols-1 md:grid-cols-2 gap-6"><!-- 基本数据监听 --><div class="bg-white rounded-lg shadow-md p-6"><h2 class="text-xl font-semibold mb-4">基本数据监听</h2><div class="space-y-4"><div class="flex justify-between items-center"><label>计数器:</label><div class="flex items-center"><button @click="state.counter--" class="bg-gray-200 hover:bg-gray-300 px-3 py-1 rounded-l">-</button><span class="px-3 py-1 border-y border-gray-300">{{ state.counter }}</span><button @click="state.counter++" class="bg-gray-200 hover:bg-gray-300 px-3 py-1 rounded-r">+</button></div></div><p class="text-gray-600">上次修改: {{ state.lastCounterUpdate }}</p></div></div><!-- 对象属性监听 --><div class="bg-white rounded-lg shadow-md p-6"><h2 class="text-xl font-semibold mb-4">对象属性监听</h2><div class="space-y-4"><div><label class="block mb-2">姓名:</label><input v-model="state.user.name" type="text" class="w-full px-3 py-2 border border-gray-300 rounded"></div><div><label class="block mb-2">年龄:</label><input v-model.number="state.user.age" type="number" class="w-full px-3 py-2 border border-gray-300 rounded"></div><p class="text-gray-600">上次修改: {{ state.lastUserUpdate }}</p></div></div><!-- 深度监听 --><div class="bg-white rounded-lg shadow-md p-6"><h2 class="text-xl font-semibold mb-4">深度监听</h2><div class="space-y-4"><div><label class="block mb-2">添加爱好:</label><div class="flex"><input v-model="state.newHobby" type="text" class="flex-1 px-3 py-2 border border-gray-300 rounded-l"placeholder="输入爱好"><button @click="addHobby" class="bg-blue-500 hover:bg-blue-600 text-white px-4 py-2 rounded-r">添加</button></div></div><div><label class="block mb-2">爱好列表:</label><ul class="space-y-2"><li v-for="(hobby, index) in state.user.hobbies" :key="index" class="flex items-center"><span>{{ hobby }}</span><button @click="removeHobby(index)" class="ml-2 text-red-500 hover:text-red-700"><i class="fa fa-times"></i></button></li></ul></div><p class="text-gray-600">爱好更新次数: {{ state.hobbyUpdateCount }}</p></div></div><!-- 多个数据源监听 --><div class="bg-white rounded-lg shadow-md p-6"><h2 class="text-xl font-semibold mb-4">多个数据源监听</h2><div class="space-y-4"><div><label class="block mb-2">宽度:</label><input v-model.number="state.dimensions.width" type="number" class="w-full px-3 py-2 border border-gray-300 rounded"></div><div><label class="block mb-2">高度:</label><input v-model.number="state.dimensions.height" type="number" class="w-full px-3 py-2 border border-gray-300 rounded"></div><div class="bg-gray-100 p-3 rounded"><p>面积: {{ state.area }}</p><p class="text-sm text-gray-500">上次计算: {{ state.lastAreaCalculation }}</p></div></div></div></div></div>
</template><script setup lang="ts">
import { reactive, watch } from 'vue'interface User {name: stringage: numberhobbies: string[]
}interface Dimensions {width: numberheight: number
}// 使用 reactive 创建响应式状态
const state = reactive({counter: 0,lastCounterUpdate: new Date().toISOString(),user: {name: '张三',age: 25,hobbies: ['阅读', '编程']} as User,newHobby: '', // 新增的爱好输入lastUserUpdate: new Date().toISOString(),hobbyUpdateCount: 0,dimensions: {width: 10,height: 20} as Dimensions,area: 200,lastAreaCalculation: new Date().toISOString()
})// 基本数据监听
watch(() => state.counter,(newValue, oldValue) => {console.log(`计数器从 ${oldValue} 变为 ${newValue}`)state.lastCounterUpdate = new Date().toISOString()}
)// 对象属性监听
watch(() => state.user.name,(newName, oldName) => {console.log(`姓名从 ${oldName} 变为 ${newName}`)state.lastUserUpdate = new Date().toISOString()}
)watch(() => state.user.age,(newAge, oldAge) => {console.log(`年龄从 ${oldAge} 变为 ${newAge}`)state.lastUserUpdate = new Date().toISOString()}
)// 深度监听
watch(() => state.user.hobbies,(newHobbies, oldHobbies) => {console.log('爱好列表更新')console.log('旧列表:', oldHobbies)console.log('新列表:', newHobbies)state.hobbyUpdateCount++},{ deep: true }
)// 多个数据源监听
watch([() => state.dimensions.width,() => state.dimensions.height],([newWidth, newHeight], [oldWidth, oldHeight]) => {console.log(`尺寸从 ${oldWidth}x${oldHeight} 变为 ${newWidth}x${newHeight}`)state.area = newWidth * newHeightstate.lastAreaCalculation = new Date().toISOString()}
)// 方法
const addHobby = () => {if (state.newHobby.trim()) {state.user.hobbies.push(state.newHobby.trim())state.newHobby = ''}
}const removeHobby = (index: number) => {state.user.hobbies.splice(index, 1)
}
</script><style scoped>
.container {max-width: 1200px;
}
</style>

http://www.hkcw.cn/article/bKdTAUBWDT.shtml

相关文章

day15 leetcode-hot100-28(链表7)

2. 两数相加 - 力扣&#xff08;LeetCode&#xff09; 1.模拟 思路 最核心的一点就是将两个链表模拟为等长&#xff0c;不足的假设为0&#xff1b; &#xff08;1&#xff09;设置一个新链表newl来代表相加结果。 &#xff08;2&#xff09;链表1与链表2相加&#xff0c;具…

边缘计算场景下的大模型落地:基于 Cherry Studio 的 DeepSeek-R1-0528 本地部署

前言 作为学生&#xff0c;我选择用 Cherry Studio 在本地调用 DeepSeek-R1-0528&#xff0c;完全是被它的实用性和 “性价比” 圈粉。最近在 GitHub 和 AI 社群里&#xff0c;大家都在热议 DeepSeek-R1-0528&#xff0c;尤其是它的数学解题和编程能力。像我在准备数学建模竞赛…

Tomcat的整体架构及其设计精髓

1.Tomcat介绍 官方文档&#xff1a;https://tomcat.apache.org/tomcat-9.0-doc/index.html 1.1 Tomcat概念 Tomcat是Apache Software Foundation&#xff08;Apache软件基金会&#xff09;开发的一款开源的Java Servlet 容器。它是一种Web服务器&#xff0c;用于在服务器端运行…

使用 Let‘s Encrypt 和 Certbot 为 Cloudflare 托管的域名申请 SSL 证书

一、准备工作 1. 确保域名解析在 Cloudflare 确保你的域名 jessi53.com 和 www.jessi53.com 的 DNS 记录已经正确配置在 Cloudflare 中&#xff0c;并且状态为 Active。 2. 安装 Certbot 在你的服务器上安装 Certbot 和 Cloudflare 插件。以下是基于 Debian/Ubuntu 和 Cent…

JAVA最新版本详细安装教程(附安装包)

目录 文章自述 一、JAVA下载 二、JAVA安装 1.首先在D盘创建【java/jdk-23】文件夹 2.把下载的压缩包移动到【jdk-23】文件夹内&#xff0c;右键点击【解压到当前文件夹】 3.如图解压会有【jdk-23.0.1】文件 4.右键桌面此电脑&#xff0c;点击【属性】 5.下滑滚动条&…

【算法】插入排序

算法系列五&#xff1a;插入排序 一、直接插入排序 1.原理 2.实现 3.性质 3.1时间复杂度 3.2空间复杂度 3.3稳定性 二、希尔排序 1.原理 1.1优化方向 1.2优化原理 2.设计 2.1比较无序时 2.2比较有序时 3.实现 4.性质 4.1时间复杂度 4.2空间复杂度 4.3稳定性…

【javaSE】String类(1)

❤️❤️前言~🥳🎉🎉🎉 hellohello~,大家好💕💕,这里是E绵绵呀✋✋ ,如果觉得这篇文章还不错的话还请点赞❤️❤️收藏💞 💞 关注💥💥,如果发现这篇文章有问题的话,欢迎各位评论留言指正,大家一起加油!一起chin up!👍👍 💥个人主页:E绵绵…

使用 Java 实现一个简单且高效的任务调度框架

目录 一、任务调度系统概述 (一)任务调度的目标 (二)任务调度框架的关键组成 二、任务状态设计 (一)任务状态流转设计 (二)任务表设计(SQL) 三、单机任务调度实现 (一)获取待处理任务 (二)执行任务 代码实现(单线程版本) (三)多线程提高吞吐量 四…

【算法题】别再为 Java 算法题犯难,码蹄杯上这些新手题库帮你打好基础

我的个人主页 我的专栏&#xff1a; 人工智能领域、java-数据结构、Javase、C语言&#xff0c;MySQL&#xff0c;希望能帮助到大家&#xff01;&#xff01;&#xff01; 点赞&#x1f44d;收藏❤ 前言&#xff1a; 码蹄杯作为编程学习中经典的逻辑训练题型&#xff0c;是提升算…

【Java开发日记】6个Java 工具,轻松分析定位 JVM 问题 !

目录 使用 JDK 自带工具查看 JVM 情况 jps jinfo jvisualvm jcm 使用 JDK 自带工具查看 JVM 情况 JDK 自带了很多命令行甚至是图形界面工具&#xff0c;帮助查看 JVM 的一些信息。比如&#xff0c;在机器上运行 ls 命令&#xff0c;可以看到 JDK 8 提供了非常多的工具或程…

Java 大视界 -- 基于 Java 的大数据分布式文件系统在数字图书馆海量文献存储与管理中的应用优化(219)

💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也期待你毫无保留地分享独特见解,愿我们于此携手成长,共赴新程!💖 全网…

寒假学习笔记【匠心制作,图文并茂】——1.20拓扑、强连通分量、缩点

文章目录 前言拓扑排序拓扑排序是怎么运作的拓扑排序的好处 强连通分量强连通是什么强连通分量是什么如何求 SCC 缩点 前言 更新的稍微有点晚…… 因为强连通分量这一块难学且知识点多&#xff0c;学习时间久了亿点&#xff0c;所以直到现在才更新。 拓扑排序 OI-Wiki 是这…

git下载和安装(完整版)

目录 一&#xff0c;官网下载 二, 安装步骤 1 双击直接安装【版本为64位系统的】 2 点击Next 3 点击Finish完成安装&#xff0c;验证安装&#xff0c;找一个桌面空白处&#xff0c;右键出现下列窗口 4 检验是否成功 一&#xff0c;官网下载 git官网地址&#xff1a;Gi…

系统思考:化繁为简的艺术

系统思考&#xff0c;其实是一门化繁为简的艺术。当我们能够把复杂的问题拆解成清晰的核心以及更加简单&#xff0c;从而提升团队的思考品质和行动品质&#xff0c;发挥最大的合力。 每个公司都想在某方面成为最优秀的&#xff0c;但是实际上具有穿透性的洞察力和摆脱虚荣心的清…

【Kotlin】简介变量类接口

【Kotlin】简介&变量&类&接口 【Kotlin】数字&字符串&数组&集合 文章目录 Kotlin_简介&变量&类&接口Kotlin的特性Kotlin优势创建Kotlin项目变量变量保存了指向对象的引用优先使用val来避免副作用 编译期常量后端变量Backing Fields后端属性…

8086 处理器 Flags 标志位全解析:CPU 的 “晴雨表” 与 “遥控器”总结:

引入&#xff1a; 你是否好奇&#xff0c;当 CPU 执行一条加法指令时&#xff0c;如何自动判断结果是否超出范围&#xff1f;当程序跳转时&#xff0c;如何快速决定走哪条分支&#xff1f;甚至在调试程序时&#xff0c;为何能让 CPU “一步一停”&#xff1f;这一切的答案&…

uniapp uni-id Error: Invalid password secret

common文件夹下uni-config-center文件夹下新建uni-id,新建config.json文件 复制粘贴以下代码&#xff0c;不要自己改&#xff0c;格式容易错 {"passwordSecret": [{"type": "hmac-sha256","version": 1}], "passwordStrength&qu…

从0到1上手Trae:开启AI编程新时代

摘要&#xff1a;字节跳动 2025 年 1 月 19 日发布的 Trae 是一款 AI 原生集成开发环境工具&#xff0c;3 月 3 日国内版推出。它具备 AI 问答、代码自动补全、基于 Agent 编程等功能&#xff0c;能自动化开发任务&#xff0c;实现端到端开发。核心功能包括智能代码生成与补全、…

云计算和服务器

一、云计算概述 ICT是世界电信协会在2001年的全球性会议上提出的综合性概念&#xff0c;ICT分为IT和CT&#xff0c;IT(information technology)信息技术&#xff0c;负责对数据生命周期的管理&#xff1b;CT(communication technology)&#xff0c;负责数据的传输管理。 CT技术…

云计算与分布式系统:从零开始构建!

🏆本文收录于「编程与技术实战」专栏,此专栏涵盖了C/C++编程、人工智能、数据结构、机器学习等技术领域的内容,助你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!! 本文目录: 前言云计算概念与架构什么是云计算?…