watch 和 watchEffect 的适用场景

watch 和 watchEffect 的适用场景

1. 明确知道要监听的数据

当你知道需要监听哪些特定的响应式数据,并在这些数据变化时执行某些操作时,可以使用 watch

javascript 复制代码
javascript复制代码
	export default {  

	  data() {  

	    return {  

	      firstName: '',  

	      lastName: ''  

	    };  

	  },  

	  watch: {  

	    firstName(newVal, oldVal) {  

	      console.log(`First name changed from ${oldVal} to ${newVal}`);  

	    },  

	    lastName(newVal, oldVal) {  

	      console.log(`Last name changed from ${oldVal} to ${newVal}`);  

	    }  
               // deep: true  开启深度监听  
	  }  

	};

在这个例子中,我们明确知道要监听 firstNamelastName 这两个数据的变化,并在它们变化时输出日志。

watchEffect 的适用场合

1. 自动追踪依赖 (某个数据,方法等)

当你不确定要监听哪些数据,或者数据之间的依赖关系不明确时,可以使用 watchEffect。它会自动追踪组件内部使用的所有响应式数据,并在其中任何一个发生变化时触发回调。

javascript 复制代码
javascript复制代码
	export default {  

	  data() {  

	    return {  

	      firstName: '',  

	      lastName: ''  

	    };  

	  },  

	  mounted() {  

	    this.$watchEffect(() => {  

	      console.log(`Full name: ${this.firstName} ${this.lastName}`);  

	    });  

	  }  

	};

在这个例子中,watchEffect 会自动追踪 firstNamelastName 这两个数据的变化,并在它们中的任何一个发生变化时输出全名。

2. 处理副作用

watchEffect 特别适用于处理副作用,即那些依赖于响应式数据但又不直接修改数据的操作。

javascript 复制代码
javascript复制代码
	export default {  

	  data() {  

	    return {  

	      searchTerm: ''  

	    };  

	  },  

	  mounted() {  

	    this.$watchEffect(async () => {  

	      const results = await fetchSearchResults(this.searchTerm);  

	      this.results = results;  

	    });  

	  }  

	};

在这个例子中,我们使用 watchEffect 来监听 searchTerm 的变化,并在它变化时异步获取搜索结果。这里 fetchSearchResults 是一个假设的异步函数,用于获取与搜索词匹配的结果。当 searchTerm 变化时,watchEffect 会自动重新运行回调函数,并更新 results 数据。

总结来说,watch 更适合明确知道要监听哪些数据并需要更多控制选项的情况,而 watchEffect 则更适用于自动追踪依赖和处理副作用的场景。在实际开发中,应根据具体需求来选择使用哪一个。

相关推荐
砚凝霜8 分钟前
软考网络工程师|案例分析:Eth‑Trunk 链路聚合、iStack 堆叠、CSS 集群核心考点总结
前端·css·网络
珐恩AI-人工智能29 分钟前
大模型意图召回偏差分析:GEO如何解决“有收录却不触发问答曝光”的难题
大数据·前端·人工智能·html·流量运营·geo优化
程序员老赵1 小时前
Docker 部署禅道 ZenTao:轻松搭建研发项目管理平台
前端·后端·github
前端小卡拉1 小时前
用了大半年 AI 编程工具,我才搞懂 Skill 到底是什么
前端·javascript
hunterandroid1 小时前
[鸿蒙从零到一] HarmonyOS 单元测试与 UI 自动化测试实战:从代码质量到用户体验的全链路保障
前端
郭邯1 小时前
用 Intl.DateTimeFormat 手写一个时区转换器,顺便聊聊我和 AI 结对编程的日常
前端·javascript
阿奇__1 小时前
微前端、iframe与Auth Code技术方案对比
前端
FungLeo1 小时前
React 管理后台实战 · 前端请求层怎么写?401 静默刷新、token 并发竞争、强制改密拦截一次说清
前端·react.js·前端框架
Vuji2 小时前
Pi 插件解剖|ssh.ts:只用 221 行,让 Agent 直接在远程机器干活
前端·人工智能·agent
漏刻有时2 小时前
Three.js 3D地图开发实录:从GeoJSON到流光飞线,一个纯前端SPA可视化引擎的12个坑
前端