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

watchEffect 与 watch的区别

watchwatchEffect最大的区别是一个是“手动挡”一个是“自动挡”

1. watchEffect

watchEffect自动收集依赖,当依赖的数据发生变化时,执行回调函数。

1.1. 特点

  • 不需要显式指定要监听的变量,它会在回调里 自动追踪用到的响应式数据。
  • 初始化时 会立即执行一次
  • 常用于逻辑简单的场景,比如打印、发请求、DOM 操作等。

1.2. 示例:

<script setup>import { ref, watchEffect } from 'vue';const count = ref(0);const name = ref('张三');// 1. 定义 watchEffectwatchEffect(() => {// 这是一个副作用函数console.log(`当前计数值是: ${count.value}`);});// 2. 1秒后修改 countsetTimeout(() => {count.value++;}, 1000);// 3. 2秒后修改 namesetTimeout(() => {name.value = '李四';}, 2000);
</script>

执行逻辑是这样的:当组件初始化时,watchEffect 会立即执行一次其内部的副作用函数。在首次执行的过程中,它会像一个智能的侦探,自动“扫描”并“记录”下函数内部所有被读取过的响应式数据。例如,如果函数中用到了 count.valuewatchEffect 就会在内部将 count 标记为自己的依赖;而函数中没有用到的 name 则不会被追踪。(其实简单来说,就是在回调函数里面写了哪些变量它会自动监听)

2. watch

watch 需要你 显式指定要监听的源,变化时才会触发回调。

2.1. 特点

  • 需要手动指定监听的 refreactive 属性 或 getter 函数。
  • 默认不会立即执行,除非你传 { immediate: true }
  • 可以拿到 新值和旧值,适合复杂逻辑(对比前后值、条件判断)。

2.2. 示例:

<script setup>import { ref, watch } from 'vue'const count = ref(0)watch(count, (newValue, oldValue) => {console.log(`count 从 ${oldValue} 变成了 ${newValue}`)}, { immediate: true })
</script>

每次 count.value 改变时,回调会执行,并且能拿到新旧值。

3. 总结

特性

watchEffect

watch

是否需要手动指定依赖

❌ 自动收集

✅ 手动指定

是否立即执行

✅ 默认立即执行

❌ 默认不执行(可 immediate: true

是否有新旧值

❌ 没有

✅ 有

适用场景

简单副作用(打印、网络请求、DOM 操作)

精确控制,复杂逻辑(需要新旧值对比)

选择的时候:如果页面上一个逻辑需要很多值,且不需要新旧值对比的时候,选择 watchEfect试一个很好的选择,这样就不需要写很长的监听值,比如:watch([category, priceRange, inStock], ...)

http://www.xdnf.cn/news/1463617.html

相关文章:

  • 双轴倾角传感器厂家与物联网角度传感器应用全解析
  • MySQL】从零开始了解数据库开发 --- 表的操作
  • 盘点完今年CoRL最火的VLA论文,发现最强的机器人,竟是用“假数据”喂大的
  • 前端视觉交互设计全解析:从悬停高亮到多维交互体系(含代码 + 图表)
  • “我店”模式:热潮中的商机还是泡沫陷阱?深度解析当前入局可行性
  • 阿里云vs腾讯云按量付费服务器
  • 腾讯云大模型训练平台
  • BigDecimal的使用
  • 【AndroidStudio】官网下载免安装版,AndroidStudio压缩版的配置和使用
  • 华为网路设备学习-32(BGP协议 七)路由反射器与联邦
  • 中小企业数字化转型卡在哪?选对AI工具+用好企业微信,人力成本直降70%
  • SQLalachemy 错误 - Lost connection to MySQL server during query
  • 功能强大的多线程端口扫描工具,支持批量 IP 扫描、多种端口格式输入、扫描结果美化导出,适用于网络安全检测与端口监控场景
  • 基于SpringBoot的旅游管理系统的设计与实现(代码+数据库+LW)
  • 零基础直奔HCIE?先打好基础,后续才更轻松!
  • Redis 深度解析:数据结构、持久化与集群
  • 【Linux手册】动静态库:从原理到制作
  • mcp_clickhouse代码学习
  • 大彩串口屏-烧录与调试
  • 解决微信小程序开发初始化npm install包失败
  • uniapp阿里云验证码使用
  • Java观察者模式
  • 【Linux游记】基础指令篇
  • 关于CAN总线bus off 理论标准 vs 工程实践
  • XX汽集团数字化转型:全生命周期网络安全、数据合规与AI工业物联网融合实践
  • 数据可视化工具推荐:5款让图表制作轻松上手的神器
  • 23ai数据库通过SQLcl生成AWR报告
  • 【FastDDS】Layer Transport ( 01-overview )
  • 五年霸榜|悬镜安全持续引领《2025年中国网络安全市场全景图》DevSecOps开发安全赛道
  • Redis 发布订阅:社区的 “通知栏与分类订阅” 系统