网站首页 > 技术文章 正文
在模板里写一行 @click="handler",背后却是一套从编译器到渲染器、再到 DOM 事件再绑定的精密流水线。本文带你拆解事件在 Vue 内部的完整生命周期。
一、事件的「身份」:props 的一种
模板:
经过编译器后,事件被翻译成虚拟节点里的一个普通属性:
因此,在渲染器眼里,事件与 id、class 没有本质区别,只是 key 以 on 开头。
二、首次挂载
渲染器在 patchProps 阶段发现 props key 以 on 开头,就进入事件分支:
此时事件处理器被直接绑定到 DOM 节点,首屏即生效。
三、更新策略
如果每次更新都「先 remove 再 add」,会带来无谓的性能损耗。Vue 采用 invoker 代理 解决这一问题:
- 在元素上新建一个隐藏属性 el._vei(Vue Event Invoker),它是一个对象。
- 对象的键是事件名,值是一个固定引用的代理函数 invoker。
- invoker 内部持有真正的事件数组或函数,更新时只需替换引用,无需重新绑定。
核心逻辑:
当 nextValue 是空数组或 null 时,直接 removeEventListener 即可卸载。
四、多处理器与同类型多事件
模板支持数组语法:
invoker 内部检测到 Array.isArray(value),就循环执行所有函数,实现「同类型多处理器」零成本扩展。
总结
Vue 的事件系统用一句话概括:
事件即 props,props 即数据,数据变化即更新,更新即最小化 DOM 操作。
理解 invoker 代理模式,你就拥有了在源码层面定位事件问题、优化事件性能的全部钥匙。
猜你喜欢
- 2025-09-23 基于Python制作的公交车站查询系统
- 2025-09-23 搅拌站管理系统_搅拌站管理系统有哪些
- 2025-09-23 WEB前端线上系统课(20k+标准)|2023年|重磅首发|无秘更新至2614集
- 2024-12-17 起底scada系统界面,它真的是工业4.0的必需品。
- 2024-12-17 设备管理系统这样设计,简直是通往制造业第一梯队的捷径
- 2024-12-17 OA系统一定会借助AI东风大发展,界面颜值可不能拖后腿。
- 2024-12-17 只有海外的B端管理系统界面,可以这么大胆的设计
- 2024-12-17 OA后台操作系统能打磨成这样,真的佩服
- 2024-12-17 OA、ERP等管理操作系统的UI设计好了,员工的效率都能翻倍
- 2024-12-17 从零打造一款精美的基于Nextjs+antd5.0的中后台管理系统
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- Oracle RAC (76)
- oracle恢复 (77)
- oracle 删除表 (52)
- oracle 用户名 (80)
- oracle 工具 (55)
- oracle 内存 (55)
- oracle 导出表 (62)
- oracle约束 (54)
- oracle 中文 (51)
- oracle链接 (54)
- oracle的函数 (58)
- oracle面试 (55)
- 前端调试 (52)
本文暂时没有评论,来添加一个吧(●'◡'●)