vue2 computed原理,与watch的区别

本文详细解释了Vue.js中computed和watch的实现原理,包括依赖收集、缓存机制,以及两者的区别,指出computed适用于频繁计算但不需实时更新的情况,而watch适合于需要异步操作和数据变化触发回调的场景。
摘要由CSDN通过智能技术生成

computed实现原理

源码实现computed

  • 依赖收集:当我们首次访问一个计算属性时,它的 getter 函数会被执行。在 getter 函数执行过程中,会访问它所依赖的响应式数据,这时就会触发数据的 getter 函数。在数据的 getter 函数中,会把当前的计算属性(也即当前的 Watcher)添加到这个数据的依赖列表(Dep)中。这个过程叫做“依赖收集”。

  • 缓存:Vue 会为每个计算属性创建一个 Watcher 实例。这个 Watcher 中有一个 dirty 属性,表示计算属性的值是否需要重新计算。当计算属性的依赖发生改变时,就会把 dirty 属性设置为 true。当我们再次访问这个计算属性时,如果 dirty 为 true,就会重新计算属性的值,并把 dirty 设置为 false;如果 dirty 为 false,就直接返回之前的计算结果。

  • 依赖更新:当一个响应式数据发生改变时,会触发它的 setter 函数。在 setter 函数中,会遍历这个数据的依赖列表(Dep),调用每一个依赖(Watcher)的 update 方法。在计算属性的 update 方法中,会把 dirty 属性设置为 true,这样下次访问计算属性时就会重新计算它的值。

computed与watch的区别

在 Vue.js 中,computed 和 watch 都是常用的数据监控方法。它们都可以监视数据变化,但实现方式和适用场景不同。

computed

  • 是一种计算属性,会自动缓存结果,适合处理复杂和频繁使用的计算
  • 只有依赖的数据发生改变时才会重新计算,因此性能更高
  • 不支持异步,当 computed 内有异步操作时无效,无法监听数据的变化
  • 如果需要对数据进行计算并且结果会频繁使用,应该使用 computed

watch

  • 是一种观察者模式,需要手动执行回调函数,可用于执行异步操作等
  • watch 监听的数据每次发生变化都会执行回调函数,因此可能会造成性能瓶颈
  • 如果需要处理数据变化后执行其他操作,或监听数组或对象的变化,应该使用 watch
  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值