computed和watch之间的区别

本文探讨了Vue.js中Computed属性与Watch的区别。Computed属性能够提供缓存的依赖计算结果,而Watch则更适合处理异步操作及复杂的业务逻辑。文章还详细解释了两者在使用场景上的差异,并提供了关于函数this指向的重要原则。

computed和watch之间的区别

  1. computed能完成的功能,watch都可以完成。
  2. watch能完成的功能,computed不一定能完成,例如:watch可以进行异步操作。setTimeout(()=>{操作})
    其中setTimeout因为在watch中所以如果不写箭头函数,定时器指定的函数会被js引擎帮忙调用。此时里指定的函数内的this被js指定为window,而如果写成箭头函数,那么指定的方法就没有了自己的this,此时就需要想外寻找,而此时的外部是watch内部的监控方法,监控方法是vue所管理的函数,所以向外找的结果就是this为vue,故加箭头的this指定的是vue
两个重要的小原则:
  1. 所有被vue管理的函数最好写成普通函数(methods内的函数或其他有被管理的),这样this的指向才是vue 或 组件实例对象。
  2. 所有不被vue所管理的函数(定时器的回调函数,ajax,axios的回调函数等)最好写成箭头函数,这样this的指向才是vue 或 组件实例对象。
Vue.js框架中,`computed`(计算属性)`watch`(观察者)都是用于数据处理的重要特性,但它们的设计目标与应用场景存在明显差异: ### Computed 计算属性 **特点:** - **自动依赖追踪:** 只要在模板中引用了该计算属性,只要它所依赖的数据源发生变化,就会重新求值。 - **缓存机制**: 如果依赖未变更,则返回之前的结果而无需再次执行函数体内的逻辑运算。 - 更适合表示一种基于其他状态派生出来的“纯”结果展示型变量。 #### 使用场景示例: 假设我们有一个输入框绑定了一个数值模型numberValue,并希望实时显示它的平方数squareNumber作为视图的一部分内容。这时就可以通过Computed来轻松实现这一需求。 ```javascript data() { return { numberValue:0, }; }, computed:{ squareNumber(){ return this.numberValue * this.numberValue; } } ``` ### Watch 观察者 **特点:** - 主动监听某些特定的状态变化并作出反应(如发起异步请求、修改另一个非响应式成员等操作); - 提供新旧两个版本之间的对比能力,在很多复杂交互流程控制中有广泛用途。 #### 使用场景实例: 比如我们需要监控用户登录信息的变化,一旦检测到已成功登陆就要跳转至首页或者其他页面刷新等功能业务。此时就需要借助于Watch功能完成此类任务。 ```javascript watch:{ isLoggedIn(newVal,oldVal){ if(newVal ===true ){ router.push('/home'); } } } ``` 总结来说,当只是单纯地想表达由已有数据推导出的新数据显示效果时优先选用 `computed`;而对于一些更复杂的业务规则或是涉及到了副作用的操作则更适合运用 `watch`.
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值