Vue生命周期的钩子函数

Vue生命周期的钩子函数

一、前言

每个 Vue 实例在被创建时都要经过一系列的初始化过程,而在这个过程中也会运行一些叫做生命周期钩子的函数,这给了用户在不同阶段添加自己的代码的机会。

二、生命周期图示

在这里插入图片描述

三、钩子函数增加log

在如下几个生命周期钩子函数里面增加log,调试验证

  • beforeCreate
  • created
  • beforeMount
  • mounted
  • beforeUpdate
  • updated
  • activated
  • deactivated
  • beforeDestroy
  • destroyed
<template>
	<!-- 省略一些代码 -->
</template>

<script>

  export default {
    name: 'detail',
    data() {
      return {
        <!-- 省略一些代码 -->
      }
    },
    beforeCreate: function() {
      console.log('《=============== beforeCreate ===============》')
      console.log("%c%s", "color:red","data   : ", this.$data)
      console.log("%c%s", "color:red","query: ", this.$route.query) 
    },
    created: function() {
      console.log('《=============== created ===============》')
      console.log("%c%s", "color:red","data   : ", this.$data)
      console.log("%c%s", "color:red","query: ", this.$route.query) 
    },
    beforeMount: function() {
      console.log('《=============== beforeMount ===============》')
      console.log("%c%s", "color:red","data   : ", this.$data)
      console.log("%c%s", "color:red","query: ", this.$route.query) 
    },
    mounted: function() {
      console.log('《=============== mounted ===============》')
      console.log("%c%s", "color:red","data   : ", this.$data)
      console.log("%c%s", "color:red","query: ", this.$route.query) 
    },
    beforeUpdate: function () {
      console.log('《=============== beforeUpdate ===============》')
      console.log("%c%s", "color:red","data   : ", this.$data)
      console.log("%c%s", "color:red","query: ", this.$route.query) 
    },
    updated: function () {
      console.log('《=============== updated ===============》')
      console.log("%c%s", "color:red","data   : ", this.$data)
      console.log("%c%s", "color:red","query: ", this.$route.query) 
    },
    activated: function () {
      console.log('《=============== activated ===============》')
      console.log("%c%s", "color:red","data   : ", this.$data)
      console.log("%c%s", "color:red","query: ", this.$route.query) 
    },
    deactivated: function () {
      console.log('《=============== deactivated ===============》')
      console.log("%c%s", "color:red","data   : ", this.$data)
      console.log("%c%s", "color:red","query: ", this.$route.query) 
    },
    beforeDestroy: function () {
      console.log('《=============== beforeDestroy ===============》')
      console.log("%c%s", "color:red","data   : ", this.$data)
      console.log("%c%s", "color:red","query: ", this.$route.query) 
    },
    destroyed: function () {
      console.log('《=============== destroyed ===============》')
      console.log("%c%s", "color:red","data   : ", this.$data)
      console.log("%c%s", "color:red","query: ", this.$route.query) 
    },
    methods: {
      <!-- 省略一些代码 -->
    }
  }
</script>

<style>
  <!-- 省略一些代码 -->
</style>

四、调试验证

  • data是本地的数据
  • query是从其他页面路由传递过来的数据
  • this.form = this.$route.query 是将传递过来的数据赋值到本地,刷新本地页面的数据

通过这两个数据,来观察View和Data之前的切换关联流程

4.1 创建页面

  • 创建页面的流程: beforeCreate —> created —> beforeMount —> mounted —> activated
  • query数据在beforeCreate就存在,毕竟是从其他页面路由传递过来的数据
  • 而data数据是从created之后才存在
    在这里插入图片描述

4.2 刷新页面数据

  • this.form = this.$route.query放置在mounted之前的函数中,都不会出现beforeUpdate和updated
  • 只有在mounted或者activated中使用,才会出现beforeUpdate和updated函数,并且页面数据正常显示
    在这里插入图片描述

4.3 保留页面,切换到其他页面

  • 这个不是浏览器网页的切换
  • 是你本网站内部的页面切换
  • 这时候会调用deactivated函数,但是路由传递过来的数据没有了,我也摸不着头脑

在这里插入图片描述

在这里插入图片描述

4.4 从其他页面再切换过来

  • 走了activated函数,路由传递过来的数据又出现了
  • 因为在activated执行了this.form = this.$route.query,所以又重复执行了beforeUpdate和updated
    在这里插入图片描述

4.5 关闭页面

  • 关闭页面,直接走beforeDestroy和destroyed,没有执行activated
  • 路由传递过来的数据直接消失,但是本地数据却留到了最后
    在这里插入图片描述

五、生命周期钩子函数详解

函数说明
beforeCreate在实例初始化之后,数据观测 (data observer) 和 event/watcher 事件配置之前被调用。
created在实例创建完成后被立即调用。在这一步,实例已完成以下的配置:数据观测 (data observer),property 和方法的运算,watch/event 事件回调。然而,挂载阶段还没开始,$el property 目前尚不可用。
beforeMount在挂载开始之前被调用:相关的 render 函数首次被调用。
mounted实例被挂载后调用,这时 el 被新创建的 vm.$el 替换了。如果根实例挂载到了一个文档内的元素上,当 mounted 被调用时 vm.$el 也在文档内。
beforeUpdate数据更新时调用,发生在虚拟 DOM 打补丁之前。这里适合在更新之前访问现有的 DOM,比如手动移除已添加的事件监听器。
updated由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用该钩子。
activated被 keep-alive 缓存的组件激活时调用。
deactivated被 keep-alive 缓存的组件停用时调用。
beforeDestroy实例销毁之前调用。在这一步,实例仍然完全可用。
destroyed实例销毁后调用。该钩子被调用后,对应 Vue 实例的所有指令都被解绑,所有的事件监听器被移除,所有的子实例也都被销毁。

六、参考

实例生命周期钩子

七、漂亮的Ending

  • 觉得好,就打个赏呗
  • 觉得好,就一键三连呗

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小康师兄

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

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

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

打赏作者

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

抵扣说明:

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

余额充值