hookEvent of Vue

【数据集】CAMS 全球生物质燃烧排放 GFAS(基于火灾辐射功率) CAMS 全球生物质燃烧排放 GFAS(基于火灾辐射功率) 阅读详情

在Vue当中,hooks可以作为一种event,在Vue的源码当中,称之为hookEvent。

<Table @hook:updated="handleTableUpdated"></Table>

从一个场景出发

有一个来自第三方的复杂表格组件,表格进行数据更新的时候渲染时间需要1s,由于渲染时间较长,为了更好的用户体验,我希望在表格进行更新时显示一个loading动画。

有一个粗暴的办法是直接修改这个组件的源码,利用beforeUpdate和updated来显示loading,但是这种办法非常不好

这是一个第三方的组件,作者发布组件的时候很可能对代码进行了压缩与构建,使得代码可读性很低,直接修改打包后的代码难度较高
如果有源码的话,可以fork一份自己修改,不过作者不一定会发布源码
无法享受开源社区对这个组件的升级与维护,你需要自己手动维护
总之,修改源码这个方案可行,但是不好,不优雅。
那么,有没有办法,可以声明式的在模板上直接给一个组件注入一个生命周期函数呢?其实是可以的,就是通过hookEvent。

生命周期函数是如何工作的

所谓生命周期函数,就是在某一个特定的时间点调用的函数,所以我们需要关注两件事:1、注册,2、调用。

我们首先从调用开始。

	vm._self = vm
	initLifecycle(vm)
	initEvents(vm)
	initRender(vm)
	callHook(vm, 'beforeCreate')
	initInjections(vm) // resolve injections before data/props
	initState(vm)
	initProvide(vm) // resolve provide after data/props
	callHook(vm, 'created')

上面是一段Vue的源码,可以看出,生命周期函数是通过callHook这个函数去调用的,自然而然,我们去看看callHook函数的代码

export function callHook (vm: Component, hook: string) {
  // #7573 disable dep collection when invoking lifecycle hooks
  pushTarget()
  const handlers = vm.$options[hook] // 选项当中的生命周期函数
  const info = `${hook} hook`
  if (handlers) {
    for (let i = 0, j = handlers.length; i < j; i++) {
      invokeWithErrorHandling(handlers[i], vm, null, vm, info)
    }
  }
  if (vm._hasHookEvent) {
    vm.$emit('hook:' + hook)
  }
  popTarget()
}

所以,callHook(‘created’)在vm._hasHookEvent为true的情况下,会执行$emit(‘hooks:created’),也就是说,一个有着 hook: 特殊前缀的事件,会在对应的生命周期当中执行。其实到这里,我们已经可以大胆推断了:只要使用类似@hooks:created这个形式,就可以从Vue的模板中声明式的注入一个生命周期函数,测试一下,it works.

<Table @hook:updated="handleTableUpdated"></Table>

hasHookEvent

之前的大胆推断,忽略了一个条件,那就是_hasHookEvent必需为true,接下来就去看看这个_hasHookEvent

const hookRE = /^hook:/ // 以hook:开头
Vue.prototype.$on = function (event: string | Array<string>, fn: Function): Component {
  const vm: Component = this
  if (Array.isArray(event)) {
    for (let i = 0, l = event.length; i < l; i++) {
      vm.$on(event[i], fn)
    }
  } else {
    (vm._events[event] || (vm._events[event] = [])).push(fn)
    // optimize hook:event cost by using a boolean flag marked at registration
    // instead of a hash lookup
    if (hookRE.test(event)) {
      vm._hasHookEvent = true
    }
  }
  return vm
}

当使用了$on方法监听事件时,如果事件名以 hooks: 作为前缀,那么这个事件会被当做hookEvent,注册事件回调的同时,

vm._hasHookEvent会被置为true,当使用callHook调用生命周期函数时,由于_hasHookEvent为true,所以会$emit(‘hooks:xxx’),注册的生命周期函数就会执行。
所以,如果你想给一个Vue组件添加生命周期函数有3个办法:

在Vue选项中添加
在模板中通过@hooks:created这种形式
vm.on(′hooks:created′,cb)或者vm.on('hooks:created', cb)或者vm.on(′hooks:created′,cb)或者vm.once(‘hooks:created’, cb)

DeepSeek+即梦:AI视频创作从0到1全突破 本文为 DeepSeek 与即梦生成视频全攻略,从前期注册登录、熟悉工具界面及硬件网络准备入手,助读者开启 AI 视频创作。详细阐述利用 DeepSeek 构思脚本、即梦实现画面生成与静态图转动态视频的方法,包括提示词编写、参数调整等技巧。同时介绍后期合成音画、添加字幕特效及多平台适配要点,结合实战案例解析全流程。还分享进阶提示词优化、版权注意等避坑指南,为创作者提供从 0 到 1 的 AI 视频创作完整解决方案。 阅读详情

相关推荐

从HSPICE到Spectre:手把手教你搞定不同SPICE仿真器的网表转换(附避坑指南)

本文详细介绍了从HSPICE到Spectre的SPICE仿真器网表转换方法,包括核心语法差异、分步转换流程和常见问题排查。通过实战案例和避坑指南,帮助工程师高效解决不同SPICE仿真器间的兼容性问题,提升集成电路设计效率。

weixin_29745609的博客 366

Vue高级----hook:beforedestroy、@hook用来监听组件生命周期的回调函数

@hook用来监听组件生命周期的回调函数 @hook是什么?用来监听组件生命周期的回调函数 这和生命周期函数mounted,created,updated有什么区别? 区别1:@hook 会在对应的生命周期函数执行后执行。 区别2:@hook 可以在父组件监听子组件的生命周期运行情况。 监听第三方组件的生命周期

muzidigbig的博客 1万+

速腾R128雷达+海康全景相机ROS数据采集避坑实录:从‘雷达不转’到MATLAB标定的完整流程

本文详细记录了速腾R128激光雷达与海康威视全景相机在ROS环境下的数据采集与MATLAB标定全流程。从硬件配置的常见陷阱(如雷达旋转参数设置)、驱动编译的依赖管理,到多传感器同步的实战技巧和MATLAB标定方法,提供了完整的避坑指南和技术方案。特别针对RoboSense R128雷达和海康相机的特殊需求给出了具体解决方案。

weixin_28717807的博客 1218

vue2 @hook 的解析与妙用

hook是什么?用来监听组件生命周期的回调函数。这和生命周期函数mounted,created,updated有什么区别?区别1:@hook 会在对应的生命周期函数执行后执行。区别2:@hook 可以在父组件监听子组件的生命周期运行情况。从这段vue源代码中我们能看到hook的部分调用逻辑,其实就是在调用我们写的,@hook这个api却没有在官方文档中出现,所以鲜有人知道它的存在和用法。

秋来九月八 6612

瑞萨芯片串口配置,基于RL78芯片的串口使用配置

在这里隆重给大家介绍瑞萨编辑器CS+ for CA 的自动生成代码功能,只需要配置几个参数,就可以得到你想要的串口配置了,我现在已经忘记怎么手动配置寄存器了,哈哈。选择设置,此时将端口设置成功接下来设置时钟,根据自己的芯片所需设置相应的时钟,自己芯片是什么时钟查看数据手册和原理图可以找到。瑞萨芯片的串口配置其实和ST芯片的串口配置差不多,只是ST芯片的中文数据手册比较多,就更好配置了,找到所需要的串口配置IO口,此时将UART0 配置为引脚P61和P62,瑞萨芯片的串口配置竟然要配置串口。

qq_45315904的博客 4302

ESP32-CAM+STM32实战:5步搞定无线图像传输到TFT屏(附完整代码)

本文详细介绍了如何利用ESP32-CAM和STM32实现无线图像传输到TFT屏幕的完整方案。通过5个关键步骤,包括硬件连接、ESP32-CAM配置、STM32数据接收、TFT屏幕驱动及系统优化,开发者可以快速构建高效的图像传输系统。特别介绍了RGB565格式的处理技巧,并提供了完整的代码实现,适用于智能家居、工业监控等多种应用场景。

weixin_30316097的博客 483

Vue 中如何使用 @hook?

一、组件内使用 在 mounted 中添加一个监听,需要在 beforeDestroy 中移除这个监听(案例:vue 轮询),这是我们可以使用 hook。 mounted () { window.addEventListener('online', this.handleOnline) this.$once('hook:beforeDestroy', function () { window.removeEventListener('online', this.handleOnline

qq_36437172的博客 5719

RT-DETR训练前的准备,将数据集划分成训练集、测试集验证集(附完整脚本及使用说明)

在计算机视觉领域,当我们着手训练一个模型时,。其中,将数据集划分为和更是一项基础性且关键的操作。这篇博客分析了这一划分背后的原因、其重要意义以及如何通过代码实现,帮助大家更好地理解和运用这一技巧,。

Limiiiing的博客 906

Vue生命周期钩子函数hook解析

声明:文章摘自https://www.cnblogs.com/goloving/p/13879157.html Vue的各生命周期,其实就是Vue开发者规定的一些hook,和git里面规定的hook类似,你只要往hook里面填自定义内容,它就可以执行。如vue实例里的beforeCreate,created,mounted等,都是hook。 简单来说,hook其实就是一种回调函数,只不过这种回调函数的名称已经被固定,内容不固定,且函数名称作为了一个接口被暴露出去。这样也更好了进行了抽象化:将经常变化的内.

iloadj的博客 6960

从入门到精通:LabVIEW全攻略

本文为 LabVIEW 全攻略指南,系统梳理从基础到高级的核心知识与应用技巧。首先介绍 LabVIEW 的图形化编程特性、数据流运行机制及开发环境,通过创建与调试 VI 的实操演示帮助入门。接着深入解析程序结构(循环、分支、顺序)、数据类型(数组、簇、波形)及图形显示技术(Graph、XY Graph 等)的原理与应用场景。高级部分涵盖多线程编程、错误处理、硬件通信及第三方工具集成等进阶技术,并针对程序逻辑、硬件适配、性能优化等常见问题提供排查与解决方案。

邓邓子的博客 3572

【WRFDA教程】客观分析(OBSGRID)详解

客观分析(OBSGRID)详解

WW、forever的博客 1133

vue3 hook的理解?如何封装一个hook?。

Vue3 官方文档是这样定义组合式函数的。,一个利用 Vue 的组合式 API 来封装和复用具有状态逻辑的函数。在开发中,我们经常会发现一些可以重复利用的代码段,于是我们将其封装成函数以供调用。这类函数包括工具函数,但是又不止工具函数,因为我们可能也会封装一些重复的业务逻辑。以往,在前端原生开发中,我们封装的这些函数都是“无状态”的。

weixin_43995143的博客 3780

Claude Code 100个真实案例 - 用AI做数据可视化大屏(ECharts+实时数据)

数据报表看着枯燥?领导汇报缺少视觉冲击力?是时候做一个酷炫的数据可视化大屏了!本案例将用 Claude Code 从零搭建一个实时数据可视化大屏,使用 ECharts 实现折线图、柱状图、饼图、地图、仪表盘等多种图表,配合 WebSocket 实现秒级数据刷新,深色主题科技感拉满!

yueyeguzhuo的专栏 196

Vue之HookEvent

前言 什么是HookEvent?实际上是Vue中提供的一类与生命周期相关的事件,这些事件的触发与生命周期函数调用存在关联。我们知道Vue2.x提供了一些生命周期函数,用于提供开发者对于特殊逻辑点的逻辑处理。本文内容实际上分为2个部分

玉案轩窗的博客 1457

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

HookEvent in Vue2.x

文章目录HookEvent in Vue2.x1. 前言1.1 发现 hookEvent1.2 hookEvent 应用场景1.2.1 场景11.2.2 场景2 HookEvent in Vue2.x 1. 前言 1.1 发现 hookEvent 2020.1.25 同事小姐姐问了一个问题,如何在 react 中监听组件的生命周期,也就是说,想知道目前页面执行到哪一个生命周期了,希望能在某个生命周期执行某个功能。就类似于 Vue 中的 hookEvent。 我从未听说和使用过。学习一直在路上,通过网上查

我是张跑跑 401

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

利用hookEvent监听组件生命周期函数

例如没有hook的时候,需要在生命周期里使用方法,维护代码也需要往后查看,如果两个函数相差几百行代码呢 mounted() { window.addEventListener('resize', this.xxx) }, updated() { // 干了一些事 }, created() { // 干了一些事 }, beforeDestroy() { // 组件销毁时,销毁监听事件 window.removeEventListener('r

D_Z_Yong的博客 1041

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Vue钩子函数之钩子事件hookEvent,监听组件

在Vue当中,hooks可以作为一种event,在Vue的源码当中,称之为hookEvent。 在Vue组件中,可以用过$on,$once去监听所有的生命周期钩子函数,如监听组件的updated钩子函数可以写成this.$on('hook:updated', () => {}) 示例:使用hook之前 <template> <div class="echarts"></div> </template> <script...

周家大小姐 4018

16.钩子事件hookEvent与插件。

钩子事件hookEvent 与vue 插件。

weixin_45735755的博客 531

echarts数据怎么赋值 vue_实用小技巧——Vue 之 hookEvent

点击上方蓝字关注我们 !hookEvent,不一样的监听组件生命周期1.内部监听生命周期函数做过echarts图表的同学的很熟悉的代码,一顿ctrl c + v,就差不多变成下面介个样子<template><divid="echarts">div>template><script>exportdefault{mounted (...

weixin_33034651的博客 356

Vue hookEvent监听组件生命周期

Vue hookEvent监听组件生命周期

大灰狼的小绵羊哥哥的博客 723

vue 中 hookEvent 应用

1. 组件内部监听生命周期函数 export default{ methods:{ fun1(){ const timer = setInterval(()=>{ //具体执行代码 console.log('1'); },1000); this.$once('hook:beforeDestory',()=>{ clearInterval(timer); timer = null;

weixin_42192113的博客 208

VUE hookEvent监听组件生命周期

hookEvent监听组件生命周期 1.内部监听生命周期函数 在Vue组件中,可以用过on,on,on,once去监听所有的生命周期钩子函数,如监听组件的updated钩子函数可以写成 this.$on(‘hook:updated’, () => {}) export default { mounted() { this.chart = echarts.init(this.$el) // 请求数据,赋值数据 等等一系列操作... // 监听窗口发生变化,resize组件

Aiolimp的博客 310

最佳实践:vue2 父组件监听子组件生命周期钩子

HookEvent 源码地址:https://github.com/vuejs/vue/blob/master/src/core/instance/lifecycle.js#L314 export function callHook (vm: Component, hook: string) { const handlers = vm.$options[hook] if (handlers) { for (let i = 0, j = handlers.length; i < j; i

李刚的学习专栏 1043

vue2.0 hookEvent 监听组件生命周期

export default { mounted() { this.chart = echarts.init(this.$el) // 请求数据,赋值数据 等等一系列操作... // 监听窗口发生变化,resize组件 window.addEventListener('resize', this.$_handleResizeChart) // 通过hook监听组件销毁钩子函数,并取消监听事件 this.$once('hook:beforeDest

qq_26642611的博客 475

Vue 源码解读(7)—— Hook Event

1、理解什么是 Hook Event ?明白其使用场景 2、深入理解 Hook Event 的实现原理

m0_66439275的博客 249

close事件 vue_实战技巧,Vue原来还可以这样写

两只黄鹂鸣翠柳,一堆bug上西天。每天上班写着重复的代码,当一个cv仔,忙到八九点,工作效率低,感觉自己没有任何提升。如何能更快的完成手头的工作,今天小编整理了一些新的Vue使用技巧。你们先加班,我先下班陪女神去逛街了。本文首发于公众号【前端有的玩】,关注我,我们一起玩前端,每天都有不一样的干货知识点等着你哦hookEvent,原来可以这样监听组件生命周期1. 内部监听生命周期函数今天产品经理又给...

weixin_35867815的博客 520
上一篇: angular2/4通过服务实现组件之间的通信EventEmitter ,emit(),subscribe()发射和接收.
下一篇: 总结移动端H5开发常用技巧
jyf_001
博客等级 码龄10年 6粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值