前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Vue 源码解析 (一)初始化流程

Vue 源码解析 (一)初始化流程

作者头像
公众号---人生代码
发布2021-04-02 07:59:41
3640
发布2021-04-02 07:59:41
举报
文章被收录于专栏:人生代码人生代码

Vue 源码解析 (一)初始化流程

最近疯狂的查看 Vue 源码,疯狂的调试代码,于是乎就有了这篇 Vue 初始化流程的文章出现,辛苦我了,今天我要去吃点好吃的,奖励以下自己,

代码语言:javascript
复制
<script src="../vue.js"></script>
   <div id="app"></div>
<script>
   const vm = new Vue({
      el: '#app'
   })
   console.log(vm)
</script>

我们把 debugger 断点打在如图这里

我们可以看到此时的 $data, $props 都为 undefined

代码语言:javascript
复制
$data: undefined
$isServer: false
$props: undefined
$ssrContext: undefined

接着往下走 debugger

此时我们发现 vm 开始出现 _uid,这个用于计算 Vuenew 过多少次

走到这一步 vm 开始出现 _isVue 属性,用来避免被 observed

options 合并策略

首先是处理内部的组件,像 keep-alive, router-link, router-view,自定义 这样的组件。

  • 通过 _isComponent 来判断 (initInternalComponent)
  • 合并 vm.constructor 的 options (resolveConstructorOptions, merge)
  • 此时 vm 才有了 $options
  • $options 里面有:
代码语言:javascript
复制
components: {}
directives: {}
el: "#app"
filters: {}

initProxy

用于初始化代理数据,此时 vm 会出现一个叫做 _renderProxy

代码语言:javascript
复制
renderProxy: Proxy

initLifecycle

初始化生命周期函数

此时 vm 出现以下内容:

代码语言:javascript
复制
$children: []
$parent: undefined
$refs: {}
$root: {}
_directInactive: false
_inactive: null
_isBeingDestroyed: false
_isDestroyed: false
_isMounted: false

initEvents

初始化事件,此时 vm 出现 _events

代码语言:javascript
复制
_events: {}

initRender

初始化渲染, 此时 vm 出现:

代码语言:javascript
复制
$scopedSlots: {}
$slots: {}
$vnode: undefined

callHook(vm,'beforeCreate')

初始化 beforeCreate 生命周期

initInjections

初始化注入内容

initState

初始化 state, 此时注意观察,我们发现 data 此时有了数据,el 还没有元素

initProvide

初始化提供

callHook(vm, 'created')

调用 created 生命周期函数,此时 有数据,el 没有元素

挂载元素

当执行了以下代码的时候,才是真正意义上挂载 DOM 元素,此时 vm 出现了 $el 元素

代码语言:javascript
复制
if (vm.$options.el) {
   vm.$mount(vm.$options.el);
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CryptoCode 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Vue 源码解析 (一)初始化流程
  • options 合并策略
  • initProxy
  • initLifecycle
  • initEvents
  • initRender
  • callHook(vm,'beforeCreate')
  • initInjections
  • initState
  • initProvide
  • callHook(vm, 'created')
  • 挂载元素
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档