什么是钩子(Hook)?一文搞懂它到底干什么用的
·
什么是钩子(Hook)?一文搞懂它到底干什么用的
你是否在代码里看到过
onMounted()、onClick()、createEventHook()这类奇怪的函数名?它们都是“钩子”。但——钩子到底是个啥?为什么要用?你能不能自己写一个?
今天我们来彻底搞懂它。
🪝 什么是钩子?
“钩子”(Hook)是程序运行时预留的可扩展接口,让你可以在某个特定时机“钩住”程序的流程,插入自己的逻辑。
换句话说:
钩子 = 某个事件发生时,可以“挂”上你自己的函数,让它一起执行。
🎯 一个生活中的比喻
设想你买了个智能门铃。它支持“当门被打开时,自动播放你录的欢迎语”。
- “门打开”是系统事件
- “播放欢迎语”是你注册的逻辑
- “那个播放的接口”就是钩子
你没有改动门本身的代码,但通过“钩子”就扩展出了新功能。
🛠️ 编程中的钩子常见在哪?
钩子几乎无处不在。比如:
| 场景 | 钩子名 | 作用 |
|---|---|---|
| Vue | onMounted() | 组件挂载完成时调用 |
| React | useEffect() | 状态更新时响应 |
| Express | app.use() | 请求进入中间件前挂钩处理 |
| Node.js | process.on('exit', fn) | 程序退出前处理 |
| Linux 内核 | kprobe | 跟踪系统调用 |
🔄 举个代码例子(VueUse)
import { createEventHook } from '@vueuse/core'
const loginSuccessHook = createEventHook<string>()
// 注册钩子回调
loginSuccessHook.on((username) => {
console.log(`欢迎用户:${username}`)
})
// 某处登录成功时触发
loginSuccessHook.trigger('liuweiqing')
这段代码说明了钩子的三个核心要素:
- 创建钩子:
createEventHook() - 注册回调:
hook.on(fn) - 触发钩子:
hook.trigger(payload)
🧠 钩子机制的好处
- 解耦逻辑:你不需要在主流程硬编码行为
- 方便扩展:未来只需注册更多回调即可
- 插件架构基石:几乎所有插件系统都靠 hook 实现
🧩 你也可以自己写个钩子系统
function createSimpleHook() {
const fns = []
return {
on(fn) {
fns.push(fn)
},
trigger(...args) {
fns.forEach(fn => fn(...args))
}
}
}
就这么几行代码,你就实现了一个简单的事件钩子系统。
✅ 总结一句话
钩子是一种“在程序运行到某个节点时,自动执行你注册的函数”的机制。
用得好,它能让你的代码结构更清晰、逻辑更解耦、功能更灵活。
如果你用的是 Vue、React、Node.js、ESP32、Arduino 或其他框架,只要看到 onXXX()、useXXX()、.hook() 等函数名,都可以大胆猜它是一个钩子!
需要我补充对应框架的钩子例子(比如 Vue 生命周期、Node.js 事件)或生成一份图文教程,也可以告诉我,我帮你继续整理。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)