如何理解Vue实例的生命周期

生命周期是什么

概念:Vue生命周期,听起来好像很高大上,其实就是Vue实例从创建、运行到销毁期间遇到的各种事件的总和。就像我们人从出生到成长到死亡的整个过程遇到的各种事件一样。
生命周期钩子,其实就是生命周期事件的别名而已。
生命周期钩子 = 生命周期函数 = 生命周期事件。

生命周期函数的分类

生命周期函数 = 创建期间的生命周期函数 + 运行期间的生命周期函数 + 销毁期间的生命周期函数。

生命周期函数实例

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>vueApp</title>
</head>

<body>
    <div id="app">
        <button @click="sayNo">修改msg</button>
        <h2 id="h2">{{msg}}</h2>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        var app = new Vue({
            el: "#app",
            data: {
                msg: "OK"
            },
            methods: {
                show() {
                    console.log('执行了show方法');
                },
                sayNo() {
                    this.msg = 'NO';
                },
            },
            beforeCreate() {
                console.log('beforeCreate:');
                console.log('date的msg:' + this.msg);
                this.show();
            },
            created() {
                console.log('created:');
                console.log('date的msg:' + this.msg);
                this.show();
            },
            beforeMount() {
                console.log('beforeMount:');
                console.log('date的msg:' + this.msg);
                console.log('页面内容的msg:' + document.getElementById('h2').innerText);
            },
            mounted() {
                console.log('Mounted:');
                console.log('date的msg:' + this.msg);
                console.log('页面内容的msg:' + document.getElementById('h2').innerText);
            },
            beforeUpdate() {
                console.log('beforeUpdate:');
                console.log('date的msg:' + this.msg);
                console.log('页面内容的msg:' + document.getElementById('h2').innerText);
            },
            updated() {
                console.log('updated:');
                console.log('date的msg:' + this.msg);
                console.log('页面内容的msg:' + document.getElementById('h2').innerText);
            },
            beforeDestroy() {

            },
            destroyed() {

            }
        });
    </script>
</body>

</html>

每个周期函数的存在时间和表现形式

创建期间的生命周期函数

(1)beforeCreate函数
这是遇到的第一个生命周期函数,表示Vue实例完全被创建出来前,会执行它,此时data和methods中的数据都还没初始化。

beforeCreate() {
    console.log('beforeCreate:');
    console.log('date的msg:' + this.msg);
    this.show();
},

在这里插入图片描述

(2)created函数
这是遇到的第二个生命周期函数,表示Vue开始编辑模板,把Vue中的那些指令进行执行,最终在内存中生成一个已经编译好的最终模板字符串。然后,把这个模板字符串,渲染为内存中的DOM,此时,只是在内存中,渲染好了模板,并没有真正把模板挂在到页面中去。

created() {
    console.log('created:');
    console.log('date的msg:' + this.msg);
    this.show();
},

在这里插入图片描述

(3)beforeMount函数
这是遇到的第三个生命周期函数,表示模板已经在内存中完成了,但是尚未把模板渲染到页面中,在beforeMounted 执行的时候,页面中的元素还没有真正替换过来,只是之前写的一些模板字符。

beforeMount() {
    console.log('beforeMount:');
    console.log('date的msg:' + this.msg);
    console.log('页面内容的msg:' + document.getElementById('h2').innerText);
},

在这里插入图片描述

(4)mounted函数
这是遇到的第四个生命周期函数,表示,内存中的模板已经真实挂在到了页面中,用户可以看到渲染好的页面了。注意: mounted是实例创建期间的最后一个生命周期函数,执行完mounted 就表示,实例已经完全地创建好了。此时,如果没有其他操作地话,这个实例,就静静地躺在我们地内存中,一动不动。

mounted() {
   console.log('Mounted:');
    console.log('date的msg:' + this.msg);
    console.log('页面内容的msg:' + document.getElementById('h2').innerText);
},

在这里插入图片描述

运行期间的生命周期函数

(1)beforeUpdate函数
当运行beforeUpdate的时候,页面中的显示数据还是旧的,此时data数据是最新的,页面还未和数据保持同步。

beforeUpdate() {
    console.log('beforeUpdate:');
    console.log('date的msg:' + this.msg);
    console.log('页面内容的msg:' + document.getElementById('h2').innerText);
},

在这里插入图片描述

(2)updated函数
updated事件执行的时候,页面和data数据已经保持同步了,都是最新的。

updated() {
    console.log('updated:');
    console.log('date的msg:' + this.msg);
    console.log('页面内容的msg:' + document.getElementById('h2').innerText);
},

在这里插入图片描述
注意:如果页面是一个静态页面,数据完全没有任何变化,那么beforeUpdate函数和updated函数就可以永远不会执行。如果数据一直在变化,那么beforeUpdate函数和updated函数的执行次数可以为无数次。

销毁期间的生命周期函数

(1)beforeDestroy函数
当执行beforeDestroy钩子函数的时候,Vue实例已经从运行阶段进入到了销毁阶段;此时Vue实例上所有的data和所有的methods,以及过滤器、指令等都还处于可用状态,此时还没有真正执行销毁的过程。

(2)destroyed函数
当执行destroyed钩子函数的时候,组件已经完全销毁了;此时Vue实例上所有的data和所有的methods,以及过滤器、指令等都已经不可用了。
注意:对于这两个函数,初学者了解即可。

生命周期图解

在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sheldon一蓑烟雨任平生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值