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 则更适用于自动追踪依赖和处理副作用的场景。在实际开发中,应根据具体需求来选择使用哪一个。

相关推荐
这里有鱼汤20 分钟前
miniQMT下载历史行情数据太慢怎么办?一招提速10倍!
前端·python
用户21411832636021 小时前
dify案例分享-免费玩转 AI 绘图!Dify 整合 Qwen-Image,文生图 图生图一步到位
前端
IT_陈寒1 小时前
Redis 性能翻倍的 7 个冷门技巧,第 5 个大多数人都不知道!
前端·人工智能·后端
mCell8 小时前
GSAP ScrollTrigger 详解
前端·javascript·动效
gnip8 小时前
Node.js 子进程:child_process
前端·javascript
excel11 小时前
为什么在 Three.js 中平面能产生“起伏效果”?
前端
excel12 小时前
Node.js 断言与测试框架示例对比
前端
天蓝色的鱼鱼14 小时前
前端开发者的组件设计之痛:为什么我的组件总是难以维护?
前端·react.js
codingandsleeping14 小时前
使用orval自动拉取swagger文档并生成ts接口
前端·javascript
石金龙15 小时前
[译] Composition in CSS
前端·css