该系列文章旨在记录解读源码的过程的一些自己的见解,希望能够帮助大家,如果错误,欢迎拍砖指点~
目录
持续更新中...
vue大致流程
文本将从vue中的核心功能出发,简析核心原理和配置。 首先我们来大致看看vue执行的流程。举个栗子:
<div id="app">{{ text }}</div>
复制代码
var vm = new Vue({
el: '#app',
data: {
text: 'hello world'
}
})
复制代码
然后再上一张官方的流程图:
在我们new Vue()
的时候,vue会进行一系列的初始化操作,比如initData
,initProps
, initWatch
等等,结合上述这个非常简单的hello world,其实内在调用了initData
这个方法,它用来给我们的data
对象上“加料”,它会通过Object.defineProperty
这个方法劫持对象中的每个属性的getter
和setter
。
在我们访问data
里的属性时(比如渲染时会访问,也就是上图的"touch"),会在此时进行依赖收集,而在我们修改属性时(比如vm.text = 'hi'
),会触发setter
,此时会通知更新, 会将该属性之前收集的依赖(实际上是一个Watcher
数组)推入到异步更新队列,这个队列会异步的触发每一个watcher.run
方法实现从而执行值计算和回调函数。
而后面就和模板编译相关了,如果我们传入了template
或者el
配置项,vue会把我们它们作为模板进行编译,编译的结果最重要的是得到一个render
函数,当然如果我们手动传入了render
配置项,就用自定义的,这个函数的是为了得到vnode
对象,也就是虚拟DOM。然后会创建一个render watcher
,这个Watcher
实例在每个Vue
实例中只可能存在一个,它会被推入到上述的异步更新队列,待队列批量执行时,它会调用vm._update
方法, 将得到的虚拟DOM渲染为真实DOM进行挂载。
整个vue大致执行流程就是这样,当然我们例子很简单,只涉及到data
配置项且数据简单,props
, watch
,computed
等等未提及,将分文进行详细讲解。