Vue 中 Observer 的用处是什么?

发布于 2022-09-06 15:03:16 字数 539 浏览 17 评论 0

在看Vue的源码,产生一个疑问:

state.jsinitData() 函数中,使用的是 observe() 方法来为数据对象绑定一个Observer对象,Observer对象执行 defineReactive() 方法为数据对象设置 setter 和 getter。
而在 initProps() 函数中,通过遍历 props 选项直接对数据执行了 defineReactive() 方法来设置 setter 和 getter。

那么,同样是为数据设置 setter 和 getter,为什么 initData()initProps() 多一个 Observer 类,这个 Observer 类的功能到底是什么?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

爱要勇敢去追 2022-09-13 15:03:17

简单看了一下,抛个砖

站在component的角度,props是immutable的,而data是mutable的
所以相对于props,data需要对对象的子对象以及数组内的元素都设置setter 和 getter
而props不用

所以Observer的功能,应该就是对数组元素的遍历执行defineReactive(),以及深度遍历Object为每一个子对象都执行defineReactive()
对应的就是Observer.observeArrayObserver.walk这两个方法

可能还有一些细节上的差别,但主要的应该就这两点了

护你周全 2022-09-13 15:03:17

Observer 类 主要做的事情就是对传入的数据 进行双向绑定!

通过Object.defineProperty来做数据劫持.然后会实例化一个Dep类(利用了发布/订阅者模式),从而对数据进行双向绑定!!!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文