vue 生命周期

为了了解vue生命周期,看了vue的源码,看的是https://cdn.jsdelivr.net/vue/...
有几个地方感觉和官网给的生命周期图示不太符合,请大家解惑

官网 vue生命周期
图片描述

Q1:

以下代码 对比 生命周期中的 A
vm._self = vm;
initLifecycle(vm);
initEvents(vm);
callHook(vm, 'beforeCreate');          
initState(vm);
callHook(vm, 'created');
initRender(vm);

我理解的observe data的阶段应该是在initState(vm),init Events的阶段是在initEvents(vm),那为什么源码的顺序不是以下

vm._self = vm;
initLifecycle(vm);
callHook(vm, 'beforeCreate');
initState(vm);
initEvents(vm);
callHook(vm, 'created');
initRender(vm);

Q2:

以下代码 对比 生命周期中的 B
function initRender (vm) {
  vm.$vnode = null; // the placeholder node in parent tree
  vm._vnode = null; // the root of the child tree
  vm._staticTrees = null;
  vm._renderContext = vm.$options._parentVnode && vm.$options._parentVnode.context;
  vm.$slots = resolveSlots(vm.$options._renderChildren, vm._renderContext);
  vm.$scopedSlots = {};
  // bind the public createElement fn to this instance
  // so that we get proper render context inside it.
  vm.$createElement = bind$1(createElement, vm);
  if (vm.$options.el) {
    vm.$mount(vm.$options.el);
  }
}

上面代码中只判断了options中有没有提供el选项,提供了就直接挂载上去,但是图示显示的是提供了el选项之后还要判断是否提供了template选项
阅读 4.1k
1 个回答

Q1 确实并没有搞明白,可以直接去知乎开个问题问一下尤雨溪。

Q2 是因为你阅读的源码只包含 run-time only 的逻辑,也就是说不包含运行时模版编译的逻辑,自然没有判断 template 的相关代码,standalone 版本的代码中可以找到这部分逻辑

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题