vue钩子顺序测试

171 阅读3分钟

一、测试日志:

测试设计为三级组件,初级不做控制台输出,二级不用`keep-alive`,三级为主要测试标准

1.1、子级提取级顺序表

创建

三级.vue?0c92:18            ==>beforeCreate:NaN
三级.vue?0c92:49            ==>computed:1
三级.vue?0c92:55            ==>created:2
三级.vue?0c92:63            ==>beforeMount:3
三级.vue?0c92:67            ==>filters:3
三级.vue?0c92:24            ==>#:directives-bind:1
三级.vue?0c92:28            ==>#:directives-inserted:2
三级.vue?0c92:75            ==>mounted:4
三级.vue?0c92:100           ==>activated: keep-alive启用

数据更新

三级.vue?0c92:49            ==>computed:5
三级.vue?0c92:88            ==>watch:1=>5
三级.vue?0c92:80            ==>beforeUpdate:5
三级.vue?0c92:67            ==>filters:5
三级.vue?0c92:32            ==>#:directives-update:1
三级.vue?0c92:36            ==>#:directives-componentUpdated:2
三级.vue?0c92:84            ==>updated:5

销毁

三级.vue?0c92:104           ==>deactivated:keep-alive停用
三级.vue?0c92:93            ==>beforeDestroy:7
三级.vue?0c92:40            ==>#:directives-unbind:3
三级.vue?0c92:97            ==>destroyed:8

1.2、总表

创建

二级.vue?5584:37            beforeCreate:NaN
二级.vue?5584:68            computed:1
二级.vue?5584:74            created:2
二级.vue?5584:82            beforeMount:3
二级.vue?5584:86            filters:3
二级.vue?5584:43            #:directives-bind:1
三级.vue?0c92:18            ==>beforeCreate:NaN
三级.vue?0c92:49            ==>computed:1
三级.vue?0c92:55            ==>created:2
三级.vue?0c92:63            ==>beforeMount:3
三级.vue?0c92:67            ==>filters:3
三级.vue?0c92:24            ==>#:directives-bind:1
二级.vue?5584:47            #:directives-inserted:2
三级.vue?0c92:28            ==>#:directives-inserted:2
三级.vue?0c92:75            ==>mounted:4
三级.vue?0c92:10            ==>activated: keep-alive启用
二级.vue?5584:94            mounted:4

数据更新

二级.vue?5584:68            computed:5
二级.vue?5584:10            watch:1=>5
二级.vue?5584:99            beforeUpdate:5
二级.vue?5584:86            filters:5
二级.vue?5584:51            #:directives-update:1
二级.vue?5584:55            #:directives-componentUpdated:2
三级.vue?0c92:49            ==>computed:5
三级.vue?0c92:88            ==>watch:1=>5
三级.vue?0c92:80            ==>beforeUpdate:5
三级.vue?0c92:67            ==>filters:5
三级.vue?0c92:32            ==>#:directives-update:1
三级.vue?0c92:36            ==>#:directives-componentUpdated:2
三级.vue?0c92:84            ==>updated:5
二级.vue?5584:103           updated:5

销毁

二级.vue?5584:112           beforeDestroy:6
二级.vue?5584:59            #:directives-unbind:3
三级.vue?0c92:104           ==>deactivated:keep-alive停用
三级.vue?0c92:93            ==>beforeDestroy:7
三级.vue?0c92:40            ==>#:directives-unbind:3
三级.vue?0c92:97            ==>destroyed:8
二级.vue?5584:116           destroyed:7

二、代码

此为三级组件的代码

<template>
  <div>
    <div v-aatest='0'>{{aa|aaa}}</div>
  </div>
</template>
<script>
export default {
  data () {
    return {
      aa: 0
    };
  },
  beforeCreate () {
    this.aa += 1;
    console.log('==>beforeCreate:' + this.aa);
  },
  directives: {
    aatest: {
      bind (el, binding, vnode) {
        binding.value++;
        console.log('==>#:directives-bind:' + binding.value);
      },
      inserted (el, binding, vnode) {
        binding.value++;
        console.log('==>#:directives-inserted:' + binding.value);
      },
      update (el, binding, vnode) {
        binding.value++;
        console.log('==>#:directives-update:' + binding.value);
      },
      componentUpdated (el, binding, vnode) {
        binding.value++;
        console.log('==>#:directives-componentUpdated:' + binding.value);
      },
      unbind (el, binding, vnode) {
        binding.value++;
        console.log('==>#:directives-unbind:' + binding.value);
      }
    }
  },
  computed: {
    bbb () {
      this.aa += 1;
      console.log('==>computed:' + this.aa);
      return this.aa
    }
  },
  created () {
    this.aa += 1;
    console.log('==>created:' + this.aa);
  },
  beforeMount () {
    this.aa += 1;
    console.log('==>beforeMount:' + this.aa);
  },
  filters: {
    aaa (value) {
      console.log('==>filters:' + value);
      value += 1;
      return value
    }

  },
  mounted () {
    this.aa += 1;
    console.log('==>mounted:' + this.aa);
  },
  beforeUpdate () {
    //this.aa += 1;
    console.log('==>beforeUpdate:' + this.aa);
  },
  updated () {
    //this.aa += 1;
    console.log('==>updated:' + this.aa);
  },
  watch: {
    bbb (f, n) {
      console.log('==>watch:' + n + '=>' + f)
    }
  },
  beforeDestroy () {
    this.aa += 1;
    console.log('==>beforeDestroy:' + this.aa);
  },
  destroyed () {
    this.aa += 1;
    console.log('==>destroyed:' + this.aa);
  },
  activated () {
    console.log('==>activated:' + ' keep-alive启用');
  },
  deactivated () {
    this.aa += 1;
    console.log('==>deactivated:' + 'keep-alive停用');
  },

};
</script>

结尾

有兴趣做测试的同学使用三级组件代码复制多一份做二级代码再引入三级的时使用keep-alive就成,初级使用v-if和一个按钮改变v-if绑定的值达到销毁组件的效果,最后希望这测试能够帮到同在学习的大家,如有错误不忘提醒留言。