Vue中computed原理分析

1.Computed也是响应式的

Computed是响应式的,读取Computed会触发get,设置Computed会触发set

2.Computed如何控制缓存

计算属性是有缓存的,比如某个计算属性C,它依赖data中的A,如果没有缓存的话,每次读取C时,C都回去读取A,从而触发A的get。多次触发A的get有时候是一个非常消耗性能的操作。所以Computed必须要有缓存。

computed里面控制缓存最重要的一点就是脏数据标记为dirty, dirty是watcher的一个属性。

  • 当dirty为true时,读取computed会重新计算
  • 当dirty为false时,读取computed会使用缓存

3. 依赖的data发生变化,computed是如何更新的

页面P依赖计算属性C, 计算属性C又依赖data里面的A, computed更新步骤如下:

  1. 由于C依赖了A, A可以收集到C的watcher
  2. 当A发生变化时,会将watcher的脏数据标记位dirty设置为true
  3. 并且A会收集到页面P的watcher,A通知P进行更新,从而页面P重新读取计算属性C, 由于此时dirty为true,此时的计算属性会重新计算。
  4. computed更新完毕,重新将脏数据标记位dirty设置为false,如果其依赖的A不发生改变,那下次再进入就会读取缓存。

4. 计算属性C是如何让data中的A收集到页面P的watcher的

这其实是计算属性中一个非常巧妙的操作。来看一下核心的源码(已简化)

function createComputedGetter(key) {
    return function() { 
        // 获取到相应 key 的 computed-watcher
        var watcher = this._computedWatchers[key];
        // 如果 computed 依赖的数据变化,dirty 会变成true,
        // 从而重新计算,然后更新缓存值 watcher.value
        if (watcher.dirty) {
            watcher.evaluate();
        }        
        // 这里是 月老computed 牵线的重点,让双方建立关系
        if (Dep.target) {
            watcher.depend();
        }        
        return watcher.value
    }
}
  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
vuecomputed原理是通过定义计算属性来实现对数据的处理和监听。计算属性是一种根据已有数据计算得出的属性,它会根据依赖的数据进行自动更新。在vue,我们可以通过computed属性来定义计算属性。 computed属性是一个对象,其的每一个属性对应一个计算属性。在计算属性,我们可以编写一个函数,该函数返回的值就是计算属性的最终值。计算属性会自动根据它所依赖的数据进行缓存,只有依赖的数据发生变化时,才会重新计算。 当计算属性所依赖的数据发生变化时,computed会自动触发重新计算,并将计算结果缓存起来。这样,当其他地方需要使用计算属性时,直接获取缓存的值,不需要每次都重新计算,从而提高了性能。 一个计算属性可以依赖多个数据,当其任意一个数据变化时,计算属性会重新计算。Vue会建立计算属性与数据之间的依赖关系,并在依赖的数据发生变化时,自动通知计算属性进行重新计算。 通过computed属性,我们可以将一些复杂的数据处理逻辑封装成函数,让代码更加清晰和易读。另外,在模板使用计算属性的值时,直接通过计算属性的名称引用即可,不需要手动调用函数。 综上所述,computed原理是通过定义计算属性实现对数据的处理和监听,它会自动根据依赖的数据进行缓存和更新。这样可以提高性能,并使数据处理的逻辑更加清晰和易读。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值