vue生命周期

vue生命周期

组件从 创建 到 销毁 的整个过程就是生命周期

钩子函数

Vue 框架内置函数,随着组件的生命周期阶段,自动执行

作用:

特定的时间点,执行特定的操作

场景:

组价创建完毕后,可以在created 生命周期函数中发起Ajax 请求,从而初始化 data 数据

分类:

4大阶段8个方法

  • 初始化
  • 挂载
  • 更新
  • 销毁

方法:

  • beforeCreate

  • created

  • beforeMount

  • mounted

  • beforeUpdate

  • updated

  • beforeDestroy

  • destroyed

在这里插入图片描述

初始化阶段

目标:

掌握初始化阶段2个钩子函数作用和执行时机

含义讲解:

  1. new Vue() - Vue实例化(组件也是一个小的Vue实例)

  2. Init Events & Lifecycle - 初始化事件和生命周期函数

  3. beforeCreate - 生命周期钩子函数被执行

  4. Init injections&reactivity - Vue内部添加data和methods等

  5. created - 生命周期钩子函数被执行,实例创建

    接下来是编译模板阶段 - 开始分析

  6. Has el option ? -是否有el选项 - 检查要挂到哪里

    没有,调用$mount()方法

    有,继续检查template选项

在这里插入图片描述

案例:

// 初始化
    // new Vue()以后, vue内部给实例对象添加了一些属性和方法, data和methods初始化"之前"
    beforeCreate() {
        console.log("beforeCreate -- 执行");
        console.log(this.msg);
        // undefined
    },
    // data和methods初始化以后
    // 场景: 网络请求, 注册全局事件
    created() {
        console.log("created -- 执行");
        console.log(this.msg);
        // hello, Vue
    },

挂载阶段

目标:

掌握挂载阶段2个钩子函数作用和执行时机

含义讲解:

  1. template 选项检查

    有 -编译template返回render渲染函数

    无 -编译el选项对应标签作为template(要渲染的模板)

  2. 虚拟DOM挂载成真实DOM之前

  3. beforeMount - 生命周期钩子函数被执行

  4. Create -把虚拟DOM和渲染的数据一并挂到真实DOM上

  5. 真实DOM挂载完毕

  6. mounted -生命周期钩子函数被执行

在这里插入图片描述

// 挂载
    // 真实DOM挂载之前
    // 场景: 预处理data, 不会触发updated钩子函数
    beforeMount() {
        console.log("beforeMount -- 执行");
        console.log(document.getElementById("myP"));
        // null
        this.msg = "重新值"
    },
    // 真实DOM挂载以后
    // 场景: 挂载后真实DOM
    mounted() {
        console.log("mounted -- 执行");
        console.log(document.getElementById("myP"));
        
    },

更新阶段

目标:

掌握更新阶段2个钩子函数作用和执行时机

含义讲解:

  1. 当data里数据改变,更新DOM之前
  2. beforeUpdate -生命周期钩子函数被执行
  3. Virtual DOM… - 虚拟DOM重新渲染,打补丁到真实DOM
  4. updated - 生命周期钩子函数被执行
  5. 当有data数据改变 - 重复这个循环

在这里插入图片描述

// 更新
    // 前提: data数据改变才执行
    // 更新之前
    beforeUpdate(){
        console.log("beforeUpdate -- 执行");
        console.log(document.querySelectorAll("#myUL>li")[4]); // undefined
    },
    // 更新之后
    // 场景: 获取更新后的真实DOM
    updated() {
        console.log("updated -- 执行");
        console.log(document.querySelectorAll("#myUL>li")[4]);
    },

销毁阶段

目标:掌握销毁阶段2个钩子函数作用和执行时机

含义讲解:

  1. 当$destroy()被调用 - 比如组件DOM被移除(例 v-if)
  2. beforeDestroy - 生命周期钩子函数被执行
  3. 拆卸数据监视器,子组件和事件侦听器
  4. 实例销毁后,最后触发一个钩子函数
  5. destroyed - 生命周期钩子函数被执行

在这里插入图片描述

// 销毁
    // 前提: v-if="false" 销毁Vue实例
    // 场景: 移除全局事件, 移除当前组件, 计时器, 定时器, eventBus移除事件$off方法
    beforeDestroy(){
        console.log('beforeDestroy -- 执行');
        clearInterval(this.timer)
    },
    destroyed(){
        console.log("destroyed -- 执行");
    }

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值