• Vue实例生命周期



    1. 概述

    每个 Vue 实例在被创建之前都要经过一系列的初始化过程。例如需要设置数据监听、编译模板、挂载实例到 DOM、在数据变化时更新 DOM 等。同时在这个过程中也会运行一些叫做生命周期钩子的函数,给予用户机会在一些特定的场景下添加他们自己的代码。

    简单来说,生命周期钩子函数就是一堆回调函数,在我们创建实例时,这些回调函数按顺序执行。

    2. 页面钩子函数

    名称作用
    beforeCreate在实例初始化之后,数据观测和事件配置之前被调用。此时 data 和 methods 以及页面的DOM结构都没有初始化,什么都做不了,执行1次
    created在实例创建完成后被立即调用,此时data 和 methods 已经可以使用,但是页面还没有渲染出来,执行1次,用this对象
    beforeMount在挂载开始之前被调用,此时页面上还看不到真实数据,只是一个模板页面而已,执行1次
    mountedel被新创建的vm.$el替换,并挂载到实例上去之后调用该钩子。 数据已经真实渲染到页面上 在这个钩子函数里面,可以进行数据请求等,执行1次
    beforeUpdate数据更新时调用,页面上数据还是旧的 n次
    updated由于数据更新完毕,页面上数据已经替换成最新的 n次
    beforeDestroy实例销毁之前调用,执行1次
    destroyed实例销毁后调用,执行1次
    activatedkeep-alive 组件激活时调用
    deactivatedkeep-alive 组件停用时调用
    errorCaptured当捕获一个来自子孙组件的错误时被调用

    3. 生命周期函数

    在这里插入图片描述

    下面我们用代码实现以下生命周期函数的执行顺序:

    <div id="app">
        <input type="text" v-model="username">
    div>
    
    <script>
        const vm = new Vue({
            el: '#app',
            data: {
                username: ''
            },
            // 初始化阶段生命周期  -- 它只都只执行1次
            beforeCreate() {
                console.log('beforeCreate');
            },
            created() {
                console.log('created');
            },
            beforeMount() {
                console.log('beforeMount');
            },
            mounted() {
                console.log('mounted');
                setTimeout(() => {
                    // 销毁
                    this.$destroy()
                }, 2000);
                this.timer = setInterval(() => {
                    console.log(111);
                }, 1000);
            },
            // 更新阶段生命周期,它们会执行N次
            beforeUpdate() {
                console.log('beforeUpdate');
            },
            updated() {
                console.log('updated');
            },
            // 销毁阶段  只执行1次
            beforeDestroy() {
                clearInterval(this.timer)
                console.log('beforeDestroy');
            },
            destroyed() {
                console.log('destroyed');
            }
        })
    script>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    在这里插入图片描述

  • 相关阅读:
    二、RabbitMQ的五种工作模式
    【LLM】0x00 大模型简介
    pytorch神经网络工具箱
    .NET性能优化-推荐使用Collections.Pooled
    排序算法——归并排序以及非递归实现
    openlayers根据半径绘制圆形,多圆连线并标记距离
    离散数学复习:命题逻辑
    javaee实验,Spring MVC拦截器的设计与实现
    基于java的移动端自动化测试 - appium-client api -DesiredCapabilities属性有哪些?
    我理解的反射
  • 原文地址:https://blog.csdn.net/weixin_45605541/article/details/126712322