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

第44篇:Vue3侦听器完全精讲——watch与watchEffect区别、深度监听、异步业务落地

前言

上一篇我们学了computed 计算属性:适合同步、纯计算、派生数据。

但真实项目中大量场景需要:数据变化后执行异步操作

比如:

  • 搜索框关键词变化 → 重新请求接口

  • 表单选项切换 → 联动加载不同数据

  • 用户信息改变 → 本地持久化存储

这些有副作用、有异步、有业务逻辑的场景,必须用侦听器 watch / watchEffect

本篇带你彻底吃透两种监听写法、区别、深度监听、立即执行、项目落地规范。

一、watch 基础监听(精准监听)

watch:精准监听指定数据,数据变化触发回调,可以获取新值、旧值。

<script setup> import { ref, watch } from 'vue' const searchKey = ref('') // 监听关键词变化 watch(searchKey, (newVal, oldVal) => { console.log('新值:', newVal) console.log('旧值:', oldVal) // 数据变化后执行搜索请求 }) </script>

二、watch 两大常用配置

1. immediate 立即执行

默认首次挂载不执行,设置 immediate: true 页面初始化立刻执行一次。

2. deep 深度监听

针对对象、数组,开启深度监听内部属性变化。

const user = reactive({ name: '', age: 0 }) watch(user, (newVal) => { console.log('用户信息变化', newVal) }, { immediate: true, deep: true })

三、精准监听对象单个属性(最优性能)

不推荐直接监听整个对象(性能差),精准监听属性是企业规范。

watch(() => user.name, (newVal) => { console.log('用户名改变', newVal) })

四、watchEffect 自动依赖监听(高级写法)

watchEffect 无需指定监听源,自动收集内部依赖,依赖变化自动执行。

特点:

  • 默认立即执行

  • 自动收集依赖,写法极简

  • 无法获取旧值

watchEffect(() => { // 自动监听 searchKey 变化 console.log('搜索关键词:', searchKey.value) })

五、watch vs watchEffect(面试必背区别)

特性

watch

watchEffect

监听来源

手动指定

自动收集依赖

初始执行

默认不执行,需immediate

默认立即执行

新旧值

可获取

无法获取旧值

适用场景

精准监听、需要旧值、复杂配置

简化代码、自动依赖、初始化逻辑

六、项目实战:搜索防抖+接口请求(高级落地)

结合之前手写防抖,实现企业标准搜索功能。

const getSearchData = debounce(async (key) => { // 模拟接口请求 console.log('请求搜索接口:', key) }, 500) watch(searchKey, (val) => { if(val) getSearchData(val) })

七、监听销毁(性能优化)

watch、watchEffect 会返回销毁函数,组件卸载手动关闭监听,杜绝内存泄漏。

const stopWatch = watch(searchKey, callback) onUnmounted(() => { stopWatch() })

八、computed vs watch 终极选型规范(必背)

  • 只做数据计算、同步派生、需要缓存 → computed

  • 需要异步、需要副作用、数据变化触发行为 → watch

九、本篇结语

computed + watch 构成了 Vue3完整响应式数据处理体系

到这里,你已经掌握:模板语法、组件通信、组合式API、生命周期、计算属性、侦听器。

Vue3 核心基础全部通关,完全可以独立开发标准 Vue 项目。

http://www.jsqmd.com/news/1274709/

相关文章:

  • 为什么你的天工AI搜索QPS卡在800?揭秘官方未公开的4级限流机制与5种绕过合规方案(含压测日志原始截图)
  • 2026 登封少林小龙武术学校招生全指南|办学资质查询入口、学费、报名条件汇总 - Luckyone王
  • GPA-v1.5 ONNX Runtime使用教程:CLI工具、浏览器UI与语音注册全流程
  • 如何快速安装Claude Desktop中文界面:3步免费汉化补丁完整指南
  • 基于U-Net的乳腺癌病理图像分割技术实践
  • MySQL JDBC SSL加密配置与避坑指南
  • 2026 东莞深圳旧卡板回收、胶合板木箱采购,外贸工厂省钱思路 - LYL仔仔
  • AI长篇内容生成失效真相(2024行业压力测试数据首次公开)
  • so-vits-svc与RVC深度对比:歌声转换技术路线选型指南
  • MSP430与LMP91000 I2C通信代码库实战:从移植到故障排查
  • Unity Shader进阶:PBR光照模型、多光源处理与性能优化实战
  • Agent工作流从零落地:避开环境依赖与API配置的常见陷阱
  • 2026 北京圣罗兰包包回收小知识,易奢福各大商圈门店均可估价 - 奢侈品回收实体店
  • 企业大模型私有化部署:数据安全与高效落地方案
  • 2026哈尔滨松北卖包5个避坑要点,避开80%不良商家,LV爱马仕出手不压价 - 逸程奢侈品回收中心
  • 钉钉AI会议助手API集成实战(附可直接部署的Python SDK+审批流自动同步脚本)
  • MySQL新手入门:从安装配置到SQL基础与连接池实战
  • CP3SP33芯片ADC与AAI模块实战:从寄存器配置到音频数据流系统构建
  • 嵌入式通信实战:1-Wire与CAN总线中断机制详解
  • 第45篇:Vue3 Router 零基础精讲——路由原理、声明式/编程式导航、参数传递
  • 2026长沙黄金回收门店怎么选?走访口碑老店,计价透明高价 - 一日一测评
  • 分期乐京东超市卡回收平台怎么选?2026年三大主流渠道实测对比 - 购物卡回收找京尔回收
  • Redux-Box测试策略:确保模块化状态管理可靠性
  • C55x DSP EMIF接口驱动NAND闪存:硬件连接与软件实现详解
  • 北京刻公章的正规店选对不踩坑 - 跑政通
  • 闲置周六福黄金如何高效变现?整理郑州多家靠谱回收门店参考 - 逸程奢侈品回收中心
  • GraphRAG:知识图谱增强的检索生成框架解析
  • pyftpdlib 架构解码:高性能 Python FTP 服务器的设计哲学与实践
  • WeChatMsg:从聊天记录到个人数字记忆的蜕变之旅
  • BBWEYY如何通过GEO解决小程序获客难的世纪难题,含零代码SAAS、AI编程、源码定制交付