Vue 中组件实例对应的 watcher, data 变动是如何通知它的,data 如何知道 watcher 的存在?
如果说 watcher 修改了 data 中的属性访问和设置,并将属性添加为依赖,那么毫无疑问,watcher 是知道 data 的,可是作为依赖的 data 是如何知道 watcher 的存在的呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
export function defineReactive (
obj: Object,
key: string,
val: any,
customSetter?: ?Function,
shallow?: boolean
) {
const dep = new Dep()
const property = Object.getOwnPropertyDescriptor(obj, key)
if (property && property.configurable === false) {
}
// cater for pre-defined getter/setters
const getter = property && property.get
const setter = property && property.set
if ((!getter || setter) && arguments.length === 2) {
}
let childOb = !shallow && observe(val)
Object.defineProperty(obj, key, {
})
}
observer data,然后通过render函数(下面的代码就是生成的render函数)触发get,收集对应watcher
然后对应data改变时,触发set,执行dep.notify(),取出watcher更新dom.
详细自己断点调试。
vuejs响应式原理真的是超级难以理解,data 中的每个 key 都会对应一个 dep,dep 里面管理的是 targetFunction 列表,实际上是 renderFunction。当 key set 的时候,调用
dep.notify()
实际上干的事情是执行 target。target 能获得data[key]
并且 render,那 watcher 呢,设置 target 吗?彻底懵了。