码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Vue:生命周期(从出生到销毁)


    生命周期(白驹过隙)

    • 一、什么是生命周期
    • 二、生命周期的作用
    • 三、生命周期的三个阶段(挂载、更新、销毁)
      • 1.挂载阶段
        • (1) 初始化:生命周期、事件,但数据代理未开始 ==> beforeCreate
        • (2)初始化:数据监测、数据代理 ==> created
        • (3)解析模版,生成虚拟DOM==>beforeMount
        • (4)将内存中的虚拟DOM转化为真实DOM插入页面 ==>mounted
      • 2.更新阶段
        • (1) beforeUpdate 在页面数据更新前
        • (2) updated 在页面数据更新后
      • 3.销毁阶段
      • (1)beforeDestroy (销毁前)
      • (2)destroyed (销毁后)
    • 四、总结生命周期

    一、什么是生命周期

    人有自己的生命,生物也有自己生命,万物都有自己的生命,而我们的Vue实例对象也是有自己的的生命的。生命周期指的就是Vue 实例从创建到销毁的过程。从开始创建、初始化数据、编译模板、挂载Dom→渲染、更新→渲染、销毁等一系列过程,称之为 Vue 的生命周期。

    注意:
    1.生命周期又名:生命周期回调函数、生命周期函数、生命周期钩子
    2.生命周期函数的名字不可更改,但函数的具体内容是程序员根据需求编写的。
    3.生命周期函数中的this指向是vm 或组件实例对象。

    二、生命周期的作用

    生命周期中有很多事件钩子,可以让我们控制整个Vue实例的过程时更容易形成好的逻辑。

    三、生命周期的三个阶段(挂载、更新、销毁)

    1.挂载阶段

    (1) 初始化:生命周期、事件,但数据代理未开始 ==> beforeCreate

    此时,无法通过vm访问到data中的数据、methods中的方法。
    比如说:我们先创建一个一个Vue实例对象

     const vm = new Vue({
                el: "#root",
                data: {
                    n: 1,
                },
     })
    

    在beforeCreate里设置一个断点debugger,我们来看看能不能打印出 n 的值

    beforeCreate() {
                    console.log('beforeCreate',this.n);
                    debugger; 
                },
    

    在这里插入图片描述
    显而易见,无法访问访问到data中的数据

    (2)初始化:数据监测、数据代理 ==> created

    此时,可以通过vm访问到data中的数据、methods中配置的方法。
    让我们来对比一下beforeCreate和created

     beforeCreate() {
                    console.log('beforeCreate',this.n);
                    // debugger;
                    
     },
     created() {
           console.log('created',this.n);
           debugger;
     },
    

    在这里插入图片描述
    结果显而易见,在created函数里我们可以看见data中的n值·

    (3)解析模版,生成虚拟DOM==>beforeMount

    此时,页面呈现的是未经Vue编译的DOM结构,所有对DOM的操作最终都不奏效,因为都会被后续的页面渲染给覆盖掉。
    那么,接下来我们验证一下。

    <div id="root">
            <h2>当前的n值是:{{n}}h2>
            <button @click="n++">点我n+1button>
        div>
    

    我们在这个阶段用dom来操作h2的值

     beforeMount() {
                    console.log('beforeMount');
                    document.querySelector('h2').innerHTML = 'DOM操作不奏效'
                    debugger
                },
    

    在这里插入图片描述在断点时,我们可以发现确实是改变了,但当我们继续运行后就发现。
    在这里插入图片描述
    这个DOM操作就失效了。那是因为在这时页面上呈现的都是未经Vue编译的DOM结构,后面的DOM就会被Vue重新渲染,所以此时最好不要进行DOM操作,因为,压根不会是实现啊!

    (4)将内存中的虚拟DOM转化为真实DOM插入页面 ==>mounted

    此时,页面呈现的是经过Vue编译的DOM结构,所有对DOM的操作均奏效,可以在此阶段进行一些初始化操作.
    验证一下:

    mounted() {
              console.log('mounted');
              document.querySelector('h2').innerHTML = 'DOM操作奏效'
    },
    

    在这里插入图片描述
    没有问题确实奏效。好了以上就是生命周期的挂载阶段。

    2.更新阶段

    数据发生改变 ==>beforeUpdate ==> 生成新的虚拟与旧的进行比较,完成页面更新 ==> update

    (1) beforeUpdate 在页面数据更新前

    此时数据是新的,页面是旧的。即:页面尚未与数据保持同步

    beforeUpdate() {
                    console.log("beforeUpdate",this.n);
                    debugger
    },
    

    请添加图片描述

    此时,不难发现在这时,数据虽然发生改变,但并没有渲染到页面上。

    (2) updated 在页面数据更新后

    此时数据是新的,页面是新的。即:页面与数据保持同步

     updated() {
                    console.log('updated'); 
                    debugger
     },
    

    此时,页面与数据已经开始保持同步。
    请添加图片描述

    3.销毁阶段

    (1)beforeDestroy (销毁前)

    看了什么几个大家应该都懂了,这个阶段就是处在销毁之前,也就是像人的弥留之际一样,所有的功能依旧完好,一般是用来做一些收尾工作,比如:关闭定时器、接触自定义事件等等收尾操作。

    (2)destroyed (销毁后)

    一切又回到回到最初开始前的样子,轻轻它走了,正如它轻轻地来,挥一挥衣袖,不带走一遍云彩。

    四、总结生命周期

    常用的生命周期钩子
    1.mounted:发送ajax请求、启动定时器、绑定自定义事件、订阅消息等【初始化操作】
    2.beforeDestroy:清除定时器、解绑自定义事件、取消订阅消息等【收尾工作】
    关于销毁Vue实例
    1.销毁后借助Vue开发者工具看不到任何信息。
    2.销毁后自定义事件会失效,但原生DOM事件依然有效
    3.一般不会在beforeDestroy操作数据,因为即使操作数据,也不会触发更新流程了。

  • 相关阅读:
    Linux 目录切换命令
    【Python从入门到精通】(二十八)五万六千字对Python基础知识做一个了结吧【值得收藏】
    treeSelect树组件设置父节点禁用
    [矩阵的乘法运算] m*M = c
    GAN生成哆啦A梦,亲测疯狂训练50000epoch的效果,俺的菜菜电脑吃不消
    校园网站设计,校园门户网站,学校官网,python计算机毕业设计
    7K325T 引脚功能详解
    利用pytorch自定义CNN网络(一):torchvision工具箱
    【Web前端入门】HTML+CSS 万字总结——带你深入学习掌握
    临近过年无情被裁,我面试大厂的这几个月…
  • 原文地址:https://blog.csdn.net/astar2022/article/details/127105690
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号