vue生命周期流程图

 

1.vue实例初始阶段

 

new Vue( ):启动Vue执行环境,创建环境中Vue实例
init event & kifecycle :初始化vue的事件环境
init injections & reactivity:初始化vue实例的基本功能 1.参数写入–数据(data),方法(methods),计算属性(computed)…2.生成响应功能(数据劫持)

vue对应的div容器代码如下:

<div id="app">
    <p>{{ msg }}</p>
    <input type="text" v-model="msg">
</div>

钩子函数 beforeCreate( ) created( ) 测试代码如下:

var vm = new Vue({
    el:"#app",
        data:{
            msg:"测试",
        },
        methods:{},
        computed:{},
        beforeCreate:function(){
            console.group("beforeCreate==>");
            console.log("this:",this); // 存在实例
            console.log("$options:",this.$options); // 存在配置项
            console.log("$el",this.$el); // 没有完成容器构建,所以 $el 为 undefined
            console.log("$data:",this.$data); // 只完成了vue的环境,但没有完成数据装载,所以为 undefined
            console.log("$data.msg:",this.msg);// 只完成了vue的环境,但没有完成数据装载,所以为 undefined
            console.groupEnd();
        },
        created() {
            console.group("created==>");
            console.log("this:",this);// 存在实例
            console.log("$options:",this.$options);// 存在配置项
            console.log("$el",this.$el);// 没有完成容器构建,所以 $el 为 undefined
            // 在完成数据装载时,执行$options.data 方法 (mergedInstanceDataFn())
            // 主要用于完成数据对象的合并 和 数据劫持的执行,最终返回一个具有劫持的 数据对象
            // 提供vue实例的 $data
            console.log("$data:",this.$data); // 已经完成了vue的基本功能定义,所以已存在数据仓库
            console.log("$data.msg:",this.msg);// 已经完成了vue的基本功能定义,所以已存在变量
            console.groupEnd();
        },
})


页面测试结果如下:

 2.容器初始化阶段

 

创建当前vue实例对应的页面容器
Has “el” option:如果Vue实例中没有el属性,流程进入no分支,通过vm.$mount()方法挂载实例
Has “template” option:确定是否自定义页面的模板结构
Compile el’s outerHTML astemplate:template属性不存在时,以定义vue时指定的el指向对应html结构作为模板编译
Compile template into render function:template属性存在时,以定义的templatehtml结构作为模板编译
Create …with it:虚拟DOM已构建完成,完成实例和虚拟DOM的关联,然后将关联的容器替换到页面的el位置
编译模板(complie),生成虚拟DOM
虚拟DOM的优点:1.减少内存使用量,2.加快页面中DOM的渲染
diff为虚拟DOM渲染算法,通过比较修改前后的js对象变化,准确定位需要重新创建的DOM
将虚拟DOM提供给render函数创建内存DOM等待调用(此时只是创建完成,并未加载到页面)
钩子函数beforeMount( ) mount( ) 测试代码如下:

beforeMount() {
   console.group("beforeMount==>");
   console.log("this:",this);// 存在实例
   console.log("$options:",this.$options);// 存在配置项
   console.log("$el",this.$el);// 实例中存在了 $el 属性值,仅表示页面中的占位dom元素
   console.log("$data:",this.$data); // 已经完成了vue的基本功能定义,所以已存在数据仓库
   console.log("$data.msg:",this.msg);// 已经完成了vue的基本功能定义,所以已存在变量
   console.groupEnd();
},
// 完成vue项目中初始化数据和功能的定义
mounted() {
   console.group("mounted==>");
   console.log("this:",this);// 存在实例
   console.log("$options:",this.$options);// 存在配置项
   console.log("$el",this.$el);// 实例中存在的 $el 属性值,表示当前实例的容器
   console.log("$data:",this.$data); // 已经完成了vue的基本功能定义,所以已存在数据仓库
   console.log("$data.msg:",this.msg);// 已经完成了vue的基本功能定义,所以已存在变量
   console.groupEnd();
},

页面测试结果如下:


3.用户操作阶段

 

 

这个阶段可以无限循环,流程为顺时针执行
when data changes: 等待用户对数据的操作
Virtual DOM re-render and patch: 将虚拟DOM重新渲染并在页面完成替换
钩子函数beforeUpdate() updated( ) 测试代码如下:

beforeUpdate() {
  console.log("beforeUpdate:",this.msg);
},
updated() {
  console.log("updated",this.msg)
},

页面测试结果如下:

 

可使用vm.$nextTick( )方法,将执行函数体延迟到页面DOM更新完成后执行

4.vue的销毁阶段

 

when vm.$destroy( ) is called: 手动销毁结束程序运行
Teardownwatchers…: 关闭数据的监视和劫持操作,关闭事件监听操作

(这是我干了三年前端后重新在网络上寻找的文章,对我来说十分有用,让我有了重新理解。如有不理解请去看原作,后面把原作的链接放上以示感谢。)
————————————————
版权声明:本文为CSDN博主「我要o泡我要o泡」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_45398848/article/details/100998008

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值