vue源码学习,new Vue都干了什么,beforeCreate,created,mounted触发前,都做了什么,执行顺序Props>Setup>Met>Data>Computed>Watch

提示:Props>Methods>Data>Computed>Watch


前言

需求:触发beforeCreate状态后,执行顺序Props>Methods>Data>Computed>Watch ,再触发created状态

一、创建项目

1、new Vue();后,执行了_init方法

在这里插入图片描述
2、_init方法是引入vue.js文件后,initMixin$1初始化的方法
3、initMixin$1方法里执行了一些方法,按照顺序

	  //初始化生命周期
	  initLifecycle(vm);
	  //初始化事件
	  initEvents(vm);
	  //初始化mixin、extends       //全局 mixin 组件 extends 的基组件 组件级 mixin
	  initRender(vm);
	  //触发beforeCreate状态
	  callHook$1(vm, 'beforeCreate', undefined, false /* setContext */);
	  //初始化取出provid          //在props和data初始化之前就可以使用(理解为取数据)
	  initInjections(vm);         // resolve injections before data/props
	  //初始化状态
	  initState(vm);
	  //初始化注入依赖            //在props和data初始化之后使用 (理解为存数据)
	  initProvide(vm);            // resolve provide after data/props
	  //触发created状态
	  callHook$1(vm, 'created');

在这里插入图片描述

initLifecycle初始化的内容;

 vm.$parent
 vm.$root
 vm.$children
 vm.$refs
 vm._provided
 vm._watcher
 vm._inactive
 vm._directInactive
 vm._isMounted
 vm._isDestroyed
 vm._isBeingDestroyed

在这里插入图片描述

initEvents初始化的内容

vm._events
vm._hasHookEvent

在这里插入图片描述

initRender初始化的内容

vm._vnode
vm._staticTrees
vm.$slots
vm.$scopedSlots
vm._c = function(){};
vm.$createElement = function(){};

在这里插入图片描述

initInjections初始化的内容,获取取_provided[provideKey]的值
在这里插入图片描述

initState初始化的内容

initProps
initSetup
initMethods
initData
initComputed
initWatch

在这里插入图片描述
触发beforeCreate状态后,执行顺序Props>Methods>Data>Computed>Watch ,再触发created状态

initProvide初始化的内容

vm.$options.provide

在这里插入图片描述
init之后触发created状态

二、生命周期

vue官方文档
1、beforeCreate​
在组件实例初始化完成之后立即调用。
2、created​
在组件实例处理完所有与状态相关的选项后调用。
3、beforeMount​
在组件被挂载之前调用。
4、mounted​
在组件被挂载之后调用。
5、beforeUpdate​
在组件即将因为一个响应式状态变更而更新其 DOM 树之前调用。
6、updated​
在组件因为一个响应式状态变更而更新其 DOM 树之后调用。
7、beforeUnmount​
在一个组件实例被卸载之前调用。
8、unmounted​
在一个组件实例被卸载之后调用。
9、errorCaptured​
在捕获了后代组件传递的错误时调用。
10、renderTracked ​
在一个响应式依赖被组件的渲染作用追踪后调用。
11、renderTriggered ​
在一个响应式依赖被组件触发了重新渲染之后调用。
12、activated​
若组件实例是 缓存树的一部分,当组件被插入到 DOM 中时调用。
这个钩子在服务端渲染时不会被调用。
13、deactivated​
若组件实例是 缓存树的一部分,当组件从 DOM 中被移除时调用。
这个钩子在服务端渲染时不会被调用。
14、serverPrefetch ​
当组件实例在服务器上被渲染之前要完成的异步函数。
在这里插入图片描述# 三、vue节点vnode

 var VNode = function VNode (
    tag,
    data,
    children,
    text,
    elm,
    context,
    componentOptions,
    asyncFactory
  ) {
    this.tag = tag;
    this.data = data;
    this.children = children;
    this.text = text;
    this.elm = elm;
    this.ns = undefined;
    this.context = context;
    this.fnContext = undefined;
    this.fnOptions = undefined;
    this.fnScopeId = undefined;
    this.key = data && data.key;
    this.componentOptions = componentOptions;
    this.componentInstance = undefined;
    this.parent = undefined;
    this.raw = false;
    this.isStatic = false;
    this.isRootInsert = true;
    this.isComment = false;
    this.isCloned = false;
    this.isOnce = false;
    this.asyncFactory = asyncFactory;
    this.asyncMeta = undefined;
    this.isAsyncPlaceholder = false;
  };

总结

踩坑路漫漫长@~@

  • 17
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值