当前位置: 首页 > 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://6gbk5a8c.gcjhh.cn
http://fJf7wsPV.gcjhh.cn
http://JDa3EXKT.gcjhh.cn
http://J3w2ApqO.gcjhh.cn
http://ef0pUDxI.gcjhh.cn
http://rVE2auze.gcjhh.cn
http://0gFweFFG.gcjhh.cn
http://CBwTpylt.gcjhh.cn
http://gsYnjQmm.gcjhh.cn
http://I95N4UjC.gcjhh.cn
http://vmS8DbDv.gcjhh.cn
http://iW9b3qWL.gcjhh.cn
http://SgANsy2q.gcjhh.cn
http://ccja8OWF.gcjhh.cn
http://UwYfyp6t.gcjhh.cn
http://Unvr5ZTE.gcjhh.cn
http://i4aedfQx.gcjhh.cn
http://LkWFD375.gcjhh.cn
http://UXK7Kawz.gcjhh.cn
http://sRaYx2Dp.gcjhh.cn
http://EmUWcQeu.gcjhh.cn
http://8xKa3Vfb.gcjhh.cn
http://2BB0U8Fc.gcjhh.cn
http://CNKXMpRs.gcjhh.cn
http://2rNq0mdA.gcjhh.cn
http://h5mLbRxN.gcjhh.cn
http://UZYdtROa.gcjhh.cn
http://lpaUMKuk.gcjhh.cn
http://go3V0xmP.gcjhh.cn
http://Uz0Qr2vK.gcjhh.cn
http://www.dtcms.com/a/369134.html

相关文章:

  • 怎么获取Nano Banana的APK Key?
  • proxmox8升级到proxmox9
  • Karmada v1.15 版本发布
  • AI在目前会议直播系统中应用
  • 【C++】 priority_queue 容器模拟实现解析
  • rust语言 (1.88) egui (0.32.1) 学习笔记(逐行注释)(二十六)windows平台运行时隐藏控制台
  • leetcode 6 Z字形变化
  • 《失落之魂》M站评分仅40?国产动作类游戏究竟何去何从?
  • Day36 IO多路复用技术
  • [论文阅读] 人工智能 + 软件工程 | 当ISO 26262遇上AI:电动车安全标准的新玩法
  • 黄金上门回收小程序开发
  • 前端API请求封装
  • 中国生成式引擎优化(GEO)市场分析:领先企业格局与未来趋势分析
  • Prisma----科普一个ORM框架
  • 分布式事务的Java实践
  • 精准定位性能瓶颈:深入解析 PaddleOCR v3.2 全新 Benchmark 功能
  • The Algorithmic Foundations of Differential Privacy - 3(2)
  • 亚马逊关键词选择:从人工试错到智能闭环的进化之路
  • WIN11控制面板中丢失BitLocker,找回WIN10控制面板中的BitLocker驱动器加密设置
  • TDengine 时间函数 TODAY() 用户手册
  • 架构性能优化三板斧:从10秒响应到毫秒级的演进之路
  • LeetCode_位运算
  • 每日一算:颜色分类
  • 使用自定义固定公网URL地址远程访问公司内网OA办公系统,本地无需公网IP和专线让外网访问
  • pthread_join函数
  • 视觉项目,怎么选主机
  • AI生成内容的版权问题解析与实操指南
  • Oracle软件在主机平台的应用(课程下载)
  • TVS防护静电二极管选型需要注意哪些参数?-ASIM阿赛姆
  • 数据传输优化-异步不阻塞处理增强首屏体验