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

相关推荐
鹏北海7 小时前
micro-app 微前端项目部署指南
前端·nginx·微服务
发现一只大呆瓜7 小时前
虚拟列表:从定高到动态高度的 Vue 3 & React 满分实现
前端·vue.js·react.js
css趣多多7 小时前
add组件增删改的表单处理
java·服务器·前端
证榜样呀7 小时前
2026 大专计算机专业必考证书推荐什么
大数据·前端
蓝帆傲亦7 小时前
前端性能极速优化完全指南:从加载秒开体验到丝滑交互
前端·交互
鱼毓屿御8 小时前
如何给用户添加权限
前端·javascript·vue.js
JustHappy8 小时前
「web extensions🛠️」有关浏览器扩展,开发前你需要知道一些......
前端·javascript·开源
何中应8 小时前
nvm安装使用
前端·node.js·开发工具
雯0609~8 小时前
hiprint:实现项目部署与打印3-vue版本-独立出模板设计与模板打印页面
前端·vue.js·arcgis
杜子不疼.8 小时前
【Linux】教你在 Linux 上搭建 Web 服务器,步骤清晰无门槛
linux·服务器·前端