【Vue】Vue生命周期

谁借莪1个温暖的怀抱¢ 2023-02-12 03:28 94阅读 0赞

目录

        1. Vue生命周期是什么?
        1. 生命周期钩子
        • 2.1 beforeCreate
        • 2.2 created
        • 2.3 beforeMounted
        • 2.4 mounted
        • 2.5 beforeUpdata
        • 2.6 upDated
        • 2.7 beforeDestroy
        • 2.8 destroyed

1. Vue生命周期是什么?

在每个Vue实例在被创建时,都会经过创建、初始化数据、模板编译、挂载DOM,数据更新使得DOM更新、实例卸载等一系列的过程。这一系列过程就是Vue的生命周期。

简单来说,Vue实例从初始化到销毁的过程就是Vue的生命周期。在这个过程中,会有一些生命周期钩子函数用户可以在不同阶段的钩子函数中添加相应的业务代码。

下图是Vue官网中给出的Vue生命周期的图示:

在这里插入图片描述

2. 生命周期钩子

简单来介绍一下生命周期钩子:

  • beforeCreate : 创建实例之前创建的钩子
  • created : 实例创建完成后执行的钩子
  • beforeMounted : 将编译完成的HTML挂载到对应虚拟DOM时触发的钩子,此时页面没有内容
  • mounted : 将编译好的HTML挂载到页面完成后执行的事件钩子
  • beforeUpdata :DOM更新之前的钩子
  • upDated : DOM更新之后的钩子
  • beforeDestroy : 实例销毁之前执行的钩子
  • destroyed : 实例销毁完成执行的钩子

再对每个钩子分别进行举例说明:

2.1 beforeCreate

beforeCreate是发生在实例初始化之后,创建实例之前的钩子事件。

在这个过程中会创建一个Vue实例,此时实例上只有一些生命周期函数和默认的事件,此时data computed watch methods上的方法和数据均不能访问:

  1. const vm = new Vue({
  2. el: '#app',
  3. data() {
  4. return {
  5. test: 'hello vue'
  6. }
  7. },
  8. beforeCreate() {
  9. console.log('beforeCreate');
  10. console.log(this.$data);
  11. console.log(this.$el);
  12. console.log(this);
  13. }
  14. })

打印结果:
在这里插入图片描述

2.2 created

这是实例创建完成后的钩子,此时我们可以读取data的值,并可以对其进行操作,把方法、计算属性也都挂载到了实例。但是依旧不能访问el,不能获取到DOM元素。

在这个钩子函数中,我们可以进行数据请求,并把请求到的数据储存在data中。但是请求的数据不宜过多。

  1. const vm = new Vue({
  2. el: '#app',
  3. data() {
  4. return {
  5. test: 'hello vue'
  6. }
  7. },
  8. created() {
  9. console.log('created');
  10. console.log(this.$data);
  11. console.log(this.$el);
  12. console.log(this);
  13. }
  14. })

打印结果:
在这里插入图片描述

2.3 beforeMounted

在这个钩子中,首先会判断el的挂载方式,挂载方式有两种:el:'#app'vm.$mount('#app'),然后判断是否有指定的template选项,如果有就将template编译到render函数中,没有则将el外部的HTML作为template 编译。

这个过程将template进行渲染保存到内存当中,但是还未挂载在页面上。

  1. const vm = new Vue({
  2. // el: '#app',
  3. data() {
  4. return {
  5. test: 'hello vue'
  6. }
  7. },
  8. beforeMount() {
  9. console.log('beforeMount');
  10. console.log(this.$data);
  11. console.log(this.$el);
  12. console.log(this);
  13. }
  14. })
  15. vm.$mount('#app')

打印结果:
在这里插入图片描述

2.4 mounted

在这个钩子中,会将实例挂载到DOM上,我们可以操作页面上的DOM,一般会在此钩子函数中做一些数据请求获取数据,进行数据初始化。 mounted在整个实例中只执行一次。

  1. const vm = new Vue({
  2. // el: '#app',
  3. data() {
  4. return {
  5. test: 'hello vue'
  6. }
  7. },
  8. mounted() {
  9. console.log('mounted');
  10. console.log(this.$data);
  11. console.log(this.$el);
  12. }
  13. })
  14. vm.$mount('#app')

打印结果:
在这里插入图片描述

2.5 beforeUpdata

在此钩子中,data中的数据已经进行了更新,但是页面数据并没有进行更新

  1. const vm = new Vue({
  2. // el: '#app',
  3. data() {
  4. return {
  5. test: 'hello vue'
  6. }
  7. },
  8. beforeUpdate() {
  9. console.log('beforeUpdata');
  10. console.log(this.test);
  11. debugger
  12. }
  13. })
  14. vm.$mount('#app')
  15. vm.test = 'hello javascript'

打印结果:
在这里插入图片描述

2.6 upDated

将data中的最新数据渲染出DOM,并将最新的DOM挂载页面,此时data数据与页面数据一致:

  1. const vm = new Vue({
  2. // el: '#app',
  3. data() {
  4. return {
  5. test: 'hello vue'
  6. }
  7. },
  8. updated() {
  9. console.log('updated');
  10. console.log(this.test);
  11. }
  12. })
  13. vm.$mount('#app')
  14. vm.test = 'hello javascript'

打印结果:
在这里插入图片描述

2.7 beforeDestroy

实例销毁之前调用,此时组件的data、计算属性、过滤器等都还处于可用的状态,销毁还并未执行。

2.8 destroyed

组件已经完全销毁,组件中的数据、方法、计算属性、过滤器等都已经不可用。

我们可以进行手动的销毁组件:vm.$destory()

发表评论

表情:
评论列表 (有 0 条评论,94人围观)

还没有评论,来说两句吧...

相关阅读