@hook扩展分析

17 篇文章 0 订阅

初遇

问题是由一个面试题而来,
父组件可以监听到子组件的生命周期吗?
以上需要手动通过 $emit 触发父组件的事件,更简单的方式可以在父组件引用子组件时通过 @hook 来监听即可,如下所示:

 //  Parent.vue
 <Child @hook:mounted="doSomething" ></Child>
  doSomething() {
    console.log('父组件监听到 mounted 钩子函数 ...'); 
},
   //  Child.vue mounted(){ 
   console.log('子组件触发 mounted 钩子函数 ...');
 }, 
  // 以上输出顺序为:
  // 子组件触发 mounted 钩子函数 ...
 // 父组件监听到 mounted 钩子函数 ...   

当然 @hook 方法不仅仅是可以监听 mounted,其它的生命周期事件,例如:created,updated 等都可以监听。

应用

1、替换$emit 触发父组件(如上方所述)

2、清除定时器

之前清除大屏定时器直接是beforeDestroy clearInterval,可以用更好的办法↓

export default{
  methods:{
    fun1(){
      let timer = setInterval(()=>{
      	//需要做的事情
         console.log(11111);
      },1000);
      this.$once('hook:beforeDestroy',()=>{
        clearInterval(timer);
        timer = null;
      })
    }
  }
}
服了,在查阅资料时,其他作者把beforeDestroy写成beforeDestory,以为写代码方式不对查半天

下面的用法有2个问题
1、vue实例中需要有这个定时器的实例,感觉有点多余;
2、 创建的定时器代码和销毁定时器的代码没有放在一起,通常很容易忘记去清理这个定时器,不容易维护;
export default{
  data(){
    timer:null  
  },
  this.timer = setInterval(()=>{
  //需要做的事情
},1000)beforeDestory(){
    clearInterval(this.timer);
    this.timer = null;
  }
}

题外
特殊情况时以上均失效不可用时,我这里采用监听路由变化进而清除定时器

watch: {
	//监听路由
	$route:{
		handler(oldVal,newVal){// 此处判断当前页面路由是否为指定路由,是则创建定时器,否则清除定时器,用在单页面
			if (oldVal.path != '/xx/xx/xx') {
				clearInterval(this.timer)
				this.timer = null
			} else {
				this.Init();
				this.timer = setInterval(() => {
					this.Init();
				}, 1000 * 30)
			}
		},
	    deep:true, // 深度监听
	    immediate: true // 使监听在页面加载完成后执行,避免数据无变化或初进页面时监听不执行          
    }
},

(扩展)Vue 的父组件和子组件生命周期钩子函数执行顺序?

Vue 的父组件和子组件生命周期钩子函数执行顺序可以归类为以下 4 部分:

  • 加载渲染过程
    父 beforeCreate -> 父 created -> 父 beforeMount -> 子 beforeCreate -> 子 created -> 子 beforeMount -> 子 mounted -> 父 mounted
  • 子组件更新过程
    父 beforeUpdate -> 子 beforeUpdate -> 子 updated -> 父 updated
  • 销毁过程
    父 beforeDestroy -> 子 beforeDestroy -> 子 destroyed -> 父 destroyed
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Linux hook 指的是在 Linux 操作系统中,通过在系统调用、函数调用或其他事件之前或之后插入自己的代码,来更改系统的默认行为的技术。它可以用来监控系统调用、跟踪程序运行、实现自定义的系统功能等。 ### 回答2: Linux中的hook是指一种编程技术,通过在软件中插入一些特定的代码段,使得这些代码段能够拦截和处理特定的系统事件或函数调用。 在Linux中,hook通常用于实现一些定制化的功能或增强软件的功能。通过hook,开发者可以在特定的系统事件发生时执行自定义的代码,如文件的打开、读取和关闭等。此外,hook还可以拦截系统对特定函数的调用,并执行自定义的处理逻辑。 在Linux系统中,hook应用广泛,常见的应用场景包括安全软件、调试工具和系统监控等。例如,安全软件可以通过hook拦截系统的网络连接事件,并进行流量监控和拦截恶意行为。调试工具可以通过hook拦截系统的函数调用,实现对程序的调试和分析。系统监控工具可以通过hook拦截文件IO操作,实现文件系统的监控和日志记录。 对于开发者来说,了解和使用hook技术非常有益。通过使用hook,开发者可以在不修改原始代码的情况下,对现有软件进行功能扩展或定制化。同时,hook技术也需要谨慎使用,因为错误的hook实现可能会导致系统不稳定或产生安全风险。 总之,Linux中的hook是一个强大的编程技术,可以实现对系统事件和函数调用的拦截和处理。通过合理使用hook,开发者可以实现各种定制化功能,增强软件的功能和性能。 ### 回答3: Linux中的Hook是一种编程机制,用于拦截和修改系统或应用程序的行为。它允许开发人员在特定事件发生之前或之后注入自定义代码,从而改变程序的逻辑和行为。 Linux系统内核通过提供系统调用钩子来实现挂钩机制。开发人员可以注册回调函数,使其在特定系统调用被调用之前或之后执行额外的操作。这样的机制允许开发人员通过在系统调用的前后插入自己的代码,来修改系统的行为或添加特定功能。例如,一个Hook可以用来实现系统调用的监控和记录,以便对系统的行为进行审计。 此外,Hook还可以被应用程序使用来修改其自身的行为。例如,一个应用程序可以注册一个Hook在某个特定事件发生时执行一些额外的操作,如日志记录、错误处理或特定的业务逻辑。这样的机制可以增加应用程序的灵活性和可扩展性。 Hook机制在系统编程和应用程序开发中广泛应用。它提供了一种灵活的方式来拦截和修改系统或应用的行为,同时不需要修改源代码。然而,使用Hook机制需要谨慎,因为不正确的使用可能会导致系统不稳定或安全性问题。因此,开发人员在使用Hook时需要仔细考虑并测试其影响,以确保其正确和可靠性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值