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

相关推荐
Tiffany_Ho几秒前
【TypeScript】知识点梳理(三)
前端·typescript
安冬的码畜日常1 小时前
【D3.js in Action 3 精译_029】3.5 给 D3 条形图加注图表标签(上)
开发语言·前端·javascript·信息可视化·数据可视化·d3.js
小白学习日记2 小时前
【复习】HTML常用标签<table>
前端·html
丁总学Java2 小时前
微信小程序-npm支持-如何使用npm包
前端·微信小程序·npm·node.js
yanlele2 小时前
前瞻 - 盘点 ES2025 已经定稿的语法规范
前端·javascript·代码规范
懒羊羊大王呀3 小时前
CSS——属性值计算
前端·css
DOKE3 小时前
VSCode终端:提升命令行使用体验
前端
xgq3 小时前
使用File System Access API 直接读写本地文件
前端·javascript·面试
用户3157476081353 小时前
前端之路-了解原型和原型链
前端