美文网首页Vue
new vue()的时候发生了什么?

new vue()的时候发生了什么?

作者: agamgn | 来源:发表于2020-02-17 06:04 被阅读0次

引言

本章节只是记录自己所看的一些代码,自己记录,并不做实际分析

正文引入

先来一段简单的代码:

<div id="app">
  {{ message }}
</div>
var app = new Vue({
  el: '#app',
  data: {
    message: 'Hello Vue!'
  }
})

上面的代码是使用vue创建的最简单的代码,那么上面的new Vue()做了哪些事情呢?

源码分析

根据构建过程的分析,找到代码的位置src/core/instance/index.js。


newvue.png

主要做一些初始化的工作,比如通过lifecycleMixin方法来初始化生命周期。同时看到 Vue 只能通过 new 关键字初始化,然后会调用 this._init 方法,该方法为Vue原型上的方法,接着我们追踪至_init函数。 该方法在 src/core/instance/init.js 中定义。

export function initMixin (Vue: Class<Component>) {
  Vue.prototype._init = function (options?: Object) {
    const vm: Component = this
    // a uid
    vm._uid = uid++
...
    // expose real self
    vm._self = vm
    initLifecycle(vm)// 初始化生命周期
    initEvents(vm)// 初始化事件中心 
    initRender(vm) // 初始化渲染
    callHook(vm, 'beforeCreate')
    initInjections(vm) // resolve injections before data/props
    initState(vm)// 初始化 data、props、computed、watcher 等等
    initProvide(vm) // resolve provide after data/props
    callHook(vm, 'created')
...
 /* mount 为将数据模型vdom挂载到真实dom上 */
    if (vm.$options.el) {
      vm.$mount(vm.$options.el)
    }
  }
}

Vue 初始化主要就干了几件事情,合并配置,初始化生命周期,初始化事件中心,初始化渲染,初始化 data、props、computed、watcher 等等,最后初始化完成检测到如果有 el 属性,则调用 vm.$mount 方法挂载 vm,挂载的目标就是把模板渲染成最终的 DOM;此过程我们重点关注initState以及 最后执行的mount。

总结

Vue 的初始化逻辑把不同的功能逻辑拆成一些单独的函数执行,让主线逻辑一目了然,这样的编程思想需要体会学习。

相关文章

网友评论

    本文标题:new vue()的时候发生了什么?

    本文链接:https://www.haomeiwen.com/subject/awkefhtx.html