Vue的生命周期一起来看看

作者:Tree_wws 时间:2024-05-02 17:03:21 

1. 生命周期(重要)

1.1 初步认识生命周期

  • 别名:生命周期回调函数、生命周期函数、生命周期钩子。

  • 生命周期是什么?Vue在关键时刻帮我们调用的一些特殊名称的函数。

  • 生命周期函数的名字不可更改,但函数内部的具体内容由程序员自行编写

  • 生命周期函数中的this指向也是vm 或 组件实例对象。

1.2 生命周期流程(8个)

1.初始化

1.beforeCreate()

2.created()

2.挂载(页面渲染)

1.beforeMount()

2.mounted()

3.更新

1.beforeUpdate()

2.updated()

4.销毁

1.beforeDestory()

2.destoryed()

1.3 生命周期详细流程图

Vue的生命周期一起来看看

1.4 常用的生命周期钩子:

beforeCreate():可以配置全局事件总线,后面会讲到先提一嘴

mounted(): 可以在此阶段发送ajax请求, 启动定时器、绑定自定义事件、订阅消息等异步任务【初始化操作】

beforeDestroy(): 在此阶段做收尾工作, 如: 清除定时器、解绑自定义事件、取消订阅消息等【首尾工作】

1.4.1 关于销毁

  • 销毁后借助Vue开发者工具看不到任何信息

  • 销毁后自定义事件会失效,但原生DOM事件依然有效

  • 一般不会在beforeDestroy操作数据,因为即使操作数据,也不会再触发更新流程了。

1.4.2 关于父子组件的生命周期 

1.加载渲染的过程

父beforeCreate ==> 父created ==> 父beforeMount ==> 子beforeCreate ==> 子created ==> 子beforeMount ==> 子mounted ==> 父mounted

2.更新的过程

父beforeUpdate ==> 子beforeUpdate ==> 子updated ==> 父updated

3.销毁过程

父beforeDestroy ==> 子beforeDestroy ==> 子destroyed ==> 父destroyed

1.5小案例

<div id="root">
       <!-- 让h3透明度产生过渡的效果 -->
       <h3 :style="{opacity:opacity}">欢迎学习Vue!</h3>
       <button @click="des">点击我销毁</button>
   </div>
   <script>
       Vue.config.productionTip = false
       let vm = new Vue({
           el: '#root',
           data: {
               opacity: 1
           },
           methods: {  
               des(){
                   // 触发此函数必定调用,beforeDestroy(),destroyed()
                   this.$destroy()
               }
           },
           mounted() { //挂载
               /*
               - 完成模板解析后并且将初始的真实的DOM元素挂载到页面后,才执行的函数
               只会执行一次
               - this指向Vue
               - 开发中常用的方法,当我们想要读取某个属性但是读不到,就可以
                 将该属性绑定到共同能够访问到的元素上,例如下面定时器的例子
               */
               this.timer = setInterval(() => {
                   this.opacity -= 0.01
                   if (this.opacity <= 0)
                       this.opacity = 1
               }, 10);
           },
           beforeDestroy() {
               console.log("beforeDestroy - 清除定时器");
               clearInterval(this.timer)
           },
           destroyed() {
               console.log("destroyed - 销毁完毕")
           },
       })
   </script>

1.6 代码举例说明生命周期钩子

<div id="root">
       <h3>n的值为:{{n}}</h3>
       <button @click="add">点击我n+1</button>
       <button @click="remove">点击销毁vm</button>
   </div>
   <script>
       Vue.config.productionTip = false
       let vm = new Vue({
           el: '#root',
           data: {
               n:1
           },
           methods: {
               add(){
                   this.n++
               },
               remove(){
                   this.$destroy()
               }
           },
           beforeCreate() {
               /*
                   此时初始化生命周期,事件等,数据代理还未开始
                   vm无法访问到data中的数据,methods中的方法
               */
               console.log("beforeCreate");
               //console.log(this.n);  //undefined
               // console.log(this.add()); // this.add is not a function
               // debugger
           },
           created() {
               /*
                   已经完成了初始化的数据监视和数据代理
                   vm可以访问到data中的数据和methods的方法
               */
               console.log("created");
               // console.log(this.n);  // 1
               // console.log(this.add());  // undefined
               // debugger
           },
           beforeMount() {
               /*
                   挂载之前,也就是图中的判断框里执行的,此阶段是Vue
                   在解析模板并且生成虚拟DOM存储在内存当中,页面还不能
                   看到解析后的样子
                */
                console.log("beforeMount");
               //  debugger
           },
           mounted() {
               /*
                   完成模板解析后并且将初始的真实的DOM元素挂载到页面后,才执行的函数
                   一般在此:开启一些定时器、发送网络请求、订阅消息、
                   绑定自定义事件等等初始化
                */
               console.log("mounted");
               // debugger
           },
           beforeUpdate() {
               /*
                   当数据发生更新后,此时数据已经更新完成,但是页面
                   还是未更新的。
                   也就是面试所问的:页面和尚未和数据保持同步的阶段
                */
               console.log("beforeUpdate");
           },
           updated() {
               /*
                   在这之前会进行新旧虚拟DOM比较,最终完成页面的更新
                   此阶段就是页面和数据保持同步
                */
                console.log("updated");
           },
           beforeDestroy() {
               /*
                   当我们调用vm.$destroy时,才会执行下面两个函数,
                   马上要执行销毁阶段,一般在这个阶段做一些收尾操作
                   比如:关掉定时器,取消订阅,解绑自定义事件
                */
               console.log("beforeDestroy");
           },
           destroyed() {
               /*
                   所有的指令,所有的自定义事件 * 都没了(只留下原生的dom的事件)
                */
               console.log("destroyed");
           },
       })
   </script>

来源:https://blog.csdn.net/Trees__/article/details/123107444

标签:Vue,生命,周期
0
投稿

猜你喜欢

  • MYSQL存储过程即常用逻辑知识点总结

    2024-01-21 07:36:36
  • 在ASP中使用SQL语句之9:表单操作

    2007-08-11 13:18:00
  • 重新编译PLSQL中的无效对象或者指定的对象 的方法

    2009-02-26 10:41:00
  • python使用pandas处理excel文件转为csv文件的方法示例

    2021-09-13 07:15:52
  • Python使用pip安装报错:is not a supported wheel on this platform的解决方法

    2022-12-12 09:07:09
  • VSCode Python开发环境配置的详细步骤

    2021-06-15 23:29:15
  • Python 高级变量之字典和字符串详解

    2021-11-16 19:36:35
  • 超全MySQL学习笔记

    2024-01-25 20:21:45
  • MYSQL插入处理重复键值的几种方法

    2024-01-22 05:41:28
  • python+adb+monkey实现Rom稳定性测试详解

    2023-02-06 07:46:00
  • 浅析Python中的多进程与多线程的使用

    2021-07-27 11:12:20
  • Python聊天室实例程序分享

    2021-01-14 15:35:42
  • 详解php用static方法的原因

    2023-11-20 19:20:45
  • PHP预定义变量9大超全局数组用法详解

    2023-06-14 10:23:47
  • Python时间差中seconds和total_seconds的区别详解

    2022-10-04 15:00:49
  • 微信跳一跳php代码实现

    2024-06-05 09:46:20
  • python批量修改交换机密码的示例

    2023-06-29 07:52:42
  • 详解Python安装scrapy的正确姿势

    2023-04-04 01:38:14
  • Python实现繁體转为简体的方法示例

    2022-08-10 01:49:58
  • sqlserver中在指定数据库的所有表的所有列中搜索给定的值

    2011-09-30 11:27:38
  • asp之家 网络编程 m.aspxhome.com