# 1. 前言
众所周知,Vue
最大的特点之一就是数据驱动视图,那么什么是数据驱动视图呢?在这里,我们可以把数据理解为状态,而视图就是用户可直观看到页面。页面不可能是一成不变的,它应该是动态变化的,而它的变化也不应该是无迹可寻的,它或者是由用户操作引起的,亦或者是由后端数据变化引起的,不管它是因为什么引起的,我们统称为它的状态变了,它由前一个状态变到了后一个状态,页面也就应该随之而变化,所以我们就可以得到如下一个公式:
UI = render(state)
上述公式中:状态state
是输入,页面UI
输出,状态输入一旦变化了,页面输出也随之而变化。我们把这种特性称之为数据驱动视图。
OK,有了基本概念以后,我们再把上述公式拆成三部分:state
、render()
以及UI
。我们知道state
和UI
都是用户定的,而不变的是这个render()
。所以Vue
就扮演了render()
这个角色,当Vue
发现state
变化之后,经过一系列加工,最终将变化反应在UI
上。
那么第一个问题来了,Vue
怎么知道state
变化了呢?
# 2. 什么是变化侦测
那Vue
是怎么知道state
变化了呢?换句话说,数据变化了是怎么通知给Vue
呢?那么,这就引出了Vue
中的变化侦测。
变化侦测就是追踪状态,亦或者说是数据的变化,一旦发生了变化,就要去更新视图。
变化侦测可不是个新名词,它在目前的前端三大框架中均有涉及。在Angular
中是通过脏值检查流程来实现变化侦测;在React
是通过对比虚拟DOM
来实现变化侦测,而在Vue
中也有自己的一套变化侦测实现机制。
那么,接下来我们就通过阅读源码来学习一下Vue
是怎么实现自己的对数据变化进行侦测的机制。
# 3. 总结
首先,我们知道了什么是数据驱动视图。数据驱动视图简单来说就是数据变化引起视图变化,那么第一步就是先要知道数据什么时候发生变化,也就是说对数据的变化要进行侦测。
其次,数据的变化侦测在三大框架中均有涉及,不同的框架有着自己的一套侦测机制。
最后,我们从源码出发,学习在Vue
中是如何对数据进行变化侦测的。
← 写在最前面 Object的变化侦测 →