Vue Watch和Dep的关系 ?

在 Vue.js 中,我们经常使用 watch 来观察和响应 Vue 实例上的数据变动。其实在 Vue 内部,watch 是通过 Dep (依赖收集类)和 Watcher (观察者类)实现的。

当我们在组件中使用 watch 选项,或者在计算属性 computed 中使用依赖数据时,Vue 会为每一个 watch 或 computed 创建一个 Watcher 实例。这个 Watcher 就是观察者,它会“观察”它所依赖的数据。

Dep 是一个可以收集依赖的类,它内部维护了一个 subs 数组,用来存放所有依赖这个数据的 Watcher

当一个数据被访问时,Vue 会调用这个数据的 getter 函数,getter 函数中会调用 Dep 的 depend 方法,将当前的 Watcher(即当前正在计算的 watch 或 computed)添加到 Dep 的 subs 数组中,这个过程叫做“依赖收集”。

当这个数据发生变化时,Vue 会调用这个数据的 setter 函数,setter 函数中会调用 Dep 的 notify 方法,遍历 subs 数组,调用每一个 Watcher 的 update 方法,通知它们数据已经更新,这个过程叫做“派发更新”。

所以,watch 和 Dep 的关系是:watch 是通过 Dep 来监听数据变化的,当数据变化时,Dep 会通知所有依赖这个数据的 watch,让它们执行对应的操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值