Vue @hook

  • 使用
    之前我们在Vue使用定时器的时候,在创建定时器的时候,当页面不存在的时候需要销毁定时器。我们一般会这样使用
<script>
  export default {
    mounted() {
      this.timer = setInterval(() => { ... }, 1000);
    },
    beforeDestroy() {
      clearInterval(this.timer);
    }
  };
</script>

但是还有更好的方式处理。这其实是我们在组件初始化的时候,挂载了beforeDestroy钩子。钩子的使用方式为
$emit(hook+声明周期),其实在源码中也是可以看到的,当我们创建一个自定义钩子的时候,也会对系统钩子和自定义钩子进行合并

<script>
  export default {
    mounted() {
      const timer = setInterval(() => { ... }, 1000);
      this.$once('hook:beforeDestroy', () => clearInterval(timer);)
    }
  };
</script>

介绍

hook可以让我们在一个声明周期中监听其他生命周期的方法,一些情况下可以简化代码和优化代码的效果。比如多个声明周期比较简单,这个时候就可以考虑把这些代码放到create,mount中。
当一个组件内的生命周期函数在执行结束后emit自定事件,不仅可以在组件中被on,Vue的语法也觉得这些事件可以被父组件v-on到。比如我们希望父组件监听到子组件mount,beforeUpdate等生命周期,那么可以使用如下实例

<v-chart
    @hook:mounted="loading = false"
    @hook:beforeUpdated="loading = true"
    @hook:updated="loading = false"
    :data="data"
/>

这样就实现了对子组件生命周期的监听。对第三方组件也是有效的

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 用途一:在同一个组件中 vue 文档在 程序化的事件侦听器 一节中讲了怎么注册/停止一个监听事件。如何监听实例的某...
    liwuwuzhi阅读 11,874评论 0 10
  • vue 之 hook使用 记录一下vue中hook的两点使用 1. 在同一个组件中 例如:在mounted中添加一...
    不行了快拦住我阅读 3,421评论 0 2
  • 记录一下vue中hook的两点使用 在同一个组件中例如:在mounted中添加一个监听需要在beforeDistr...
    Iterate阅读 1,486评论 0 4
  • 生命周期 每个Vue实例在被创建之前都要经过一系列的初始化过程。例如需要设置数据监听、编译模板、挂载实例到DOM、...
    oWSQo阅读 213评论 0 0
  • 路由参数解耦 一般在组件内使用路由参数,大多数人会这样做: 在组件中使用 $route 会使之与其对应路由形成高度...
    宁_Yi阅读 289评论 0 0