# 简介
我们都知道,Vue是一个MVVM框架。MVVM采用双向数据绑定,View
中数据变化将自动反映到ViewModel
上,反之,Model
中数据变化也将会自动展示在页面上。把Model
和View
关联起来的就是ViewModel
。ViewModel
负责把Model
的数据同步到View
显示出来,还负责把View
的修改同步回Model
。
那么问题来了,ViewModel
是如何知道Model
中的数据发生变化了呢?
# 什么是变化侦测?
变化侦测就是用来解决这个问题的
变化侦测,或称为状态追踪,是指监测数据的变化情况,并在发生变化时更新视图。
变化侦测可以分为两种类型:推(push)和拉(pull)。
在Angular
和React
中,采用的是拉方式的变化侦测。这意味着当状态发生变化时,它并不知道具体哪个状态发生了变化,只知道可能有状态发生变化。然后,它会向框架发送一个信号,告知框架可能有变化发生。框架在接收到信号后,会进行一次全面的比对,以确定哪些DOM节点需要重新渲染。在Angular
中,这个过程被称为脏检查,而在React
中则使用了虚拟DOM
。
而Vue的变化侦测属于推方式。当状态发生变化时,Vue能够立即察觉,并且在某种程度上能够知道哪些状态发生了变化。因此,它具有更多的信息,可以进行更精细的更新操作。
接下来我们通过源码来学习Vue的数据变化侦测实现。
← 源码入口 Object的变化侦测 →