new Vue发生了什么
- 初始化一个 vue 实例的一系列相关环境(watcher,lifecycle, methods等等),
- compile:将 template (若有)转化成 render,在 render 过程中每一个模板节点都会生成对应的 _c,也就是执行 createElement 函数
- 给实例注册一个渲染 Watcher,渲染 watcher 拥有一个回调,该回调函数会在初始化和每次 vm 实例更新时触发,其中初始化的时候包含下面两步骤:
- 利用 render 函数生成 vnode。 从根 vnode开始创建(处理边界条件包括 textVnode,emptyVnode 等等),摊平所有 children vnode,children 拍平成一维数组是为了建立好 tree 的数据结构,因为对于 tree 来说,每个节点的 children 就是一维数组。最终创建成一个 vnode tree。
- 开始执行 patch 过程,从根 vnode 起开始创建真实 DOM,递归一整个 vnode tree,递归到最底层的时候开始将 vnode->el 插入到 parent vnode->el。patch 的递归过程是一个自上 而下的过程,但是插入到 DOM 节点的顺序是自下而上,也就是子节点先插入,父节点后插入。 也就是当每一个真实 DOM 插入到父亲 DOM 节点的时候,当前这个 DOM 节点会 是一个构建好的 DOM tree。
vue源码学习
原文:https://www.cnblogs.com/ltog/p/14363339.html