前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >vue生命周期

vue生命周期

作者头像
子舒
发布2022-06-09 13:55:01
2960
发布2022-06-09 13:55:01
举报
文章被收录于专栏:子舒的个人博客

学习vue中一个非常重要的领域,就是生命周期,它包含了很多的内容。每个vue实例在被创建的时候都要经历一系列的初始化过程,这个过程就是vue的生命周期。

每个vue实例在被创建的时候都要经过一系列的初始化过程——例如,需要把设置数据监听、编译模板、将实例挂载到DOM并在数据变化时更新DOM等,我们要把这一系列的过程称为组件的生命周期(组件从注册到销毁的整个过程)。我们有时候需要在组件生命周期的某个过程中,执行某些代码,基于此,vue提供了生命周期钩子函数,给了用户在不同阶段添加自己的代码的机会。

但是在此之前,我们要详细的介绍下组件的生命周期,以及生命后期中每个阶段组件完成和未完成的部分。

一、组件的生命周期

放一张大家都很熟悉的官网文章中对生命周期的注释图。

从图中可以看出,vue为生命周期提供了8个钩子函数,分别是:

  • beforeCreate: 创建前
  • created: 创建后
  • beforeMount: 挂载前
  • mounted: 挂载后
  • beforeUpate: 更新前
  • upated: 更新后
  • beforeDestoy: 销毁前
  • destoyed: 销毁后

1.beforeCreate

beforeCreate在vue实例发生之后,数据观测(data observer) 和 event/watcher 事件配置之前被调用。

我们在上面的例子中在的beforeCreate钩子中调用Vue的data和method,来看一下结果:

可以看到Vue中的data和方法都是去不到的,并且是在wath之前执行

2.created

实例已经创建完成之后被调用。在这一步,实例已完成以下的配置:数据观测(data observer),属性和方法的运算, watch/event 事件回调。然而,挂载阶段还没开始,$el 属性目前不可见。

主要应用:调用数据,调用方法,调用异步函数

console输出的结果我们看一下

可以看到:created钩子可以获取Vue的data,调用Vue方法,获取原本HTML上的直接加载出来的DOM,但是无法获取到通过挂载模板生成的DOM(例如:v-for循环遍历Vue.list生成li)

3.beforeMount

在挂载开始之前被调用:相关的 render 函数(模板)首次被调用。

例如通过v-for生成的html还没有被挂载到页面上

代码语言:javascript
复制
 beforeMount: function () {
    console.log('beforeMount:',document.getElementsByTagName('li').length);
  },

console打印出来的beforeMount为1

4.mounted

el 被新创建的 vm.$el 替换,并挂载到实例上去之后调用该钩子。

有初始值的DOM渲染,例如我们的初始数据list,渲染出来的li,只有这里才能获取

代码语言:javascript
复制
 mounted: function () {
    console.log('mounted:',document.getElementsByTagName('li').length);
  },

结果 mounted: 3 , 可以看到到这里为止,挂载到实例上了,我们可以获取到li的个数了

5.beforeUpdate

数据更新时调用,发生在虚拟 DOM 重新渲染和打补丁之前。 你可以在这个钩子中进一步地更改状态,这不会触发附加的重渲染过程。

当我们更改Vue的任何数据,都会触发该函数

代码语言:javascript
复制
 beforeUpdate: function () {
    console.log('beforeUpdate 钩子执行.');
    console.log('beforeUpdate:'+this.message)
  },

6.updated

由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用该钩子。

当这个钩子被调用时,组件 DOM 已经更新,所以你现在可以执行依赖于 DOM 的操作。然而在大多数情况下,你应该避免在此期间更改状态,因为这可能会导致更新无限循环。

该钩子在服务器端渲染期间不被调用。

数据更新就会触发(vue所有的数据只有有更新就会触发),如果想数据一遍就做统一的处理,可以用这个,如果想对不同数据的更新做不同的处理可以用nextTick,或者是watch进行监听

代码语言:javascript
复制
 updated: function () {
    console.log('updated 钩子执行...');
    console.log('updated:',this.message)
  },

7.beforeDestroy

实例销毁之前调用。在这一步,实例仍然完全可用。

8.destroyed

Vue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。 该钩子在服务器端渲染期间不被调用。

结果

可以看打到销毁Vue实例时会调用这两个函数

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020 年 06 月,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、组件的生命周期
    • 1.beforeCreate
      • 2.created
        • 3.beforeMount
          • 4.mounted
            • 5.beforeUpdate
              • 6.updated
                • 7.beforeDestroy
                  • 8.destroyed
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档