Vue生命周期钩子中如何处理Window事件绑定?全局监听器的回收

冷漠man

冷漠man

2026-05-08

715人浏览

原创

vue中绑定window事件应mounted时添加、beforedestroy/beforeunmount时移除,确保函数引用一致且一一对应,避免内存泄漏;推荐使用usewindowsize等现代组合式函数替代resize监听。

vue生命周期钩子中如何处理window事件绑定?全局监听器的回收

在 Vue 生命周期中绑定 window 事件,核心是“挂载时加、销毁前删”,否则容易引发内存泄漏或重复监听。关键不在能不能用,而在什么时候加、怎么删、删得干不干净。

绑定时机:mounted 是最稳妥的选择

虽然 created 阶段也能访问 window 对象,但此时 DOM 尚未挂载,若事件处理逻辑涉及 ref、元素尺寸(如 window.innerWidth)或依赖渲染后的布局,就可能取值不准或报错。mounted 确保组件已真实挂载,DOM 可用,window 对象稳定可读。

  • 直接在 mounted 中调用 window.addEventListener('resize', handler)
  • handler 必须是具名函数或 this 上的 methods 方法,不能是内联箭头函数
  • 如果需初始化状态(如首次读取窗口宽高),也放在这里执行

解绑时机:beforeDestroy(Vue 2)或 beforeUnmount(Vue 3)不可替代

destroyed 或 unmounted 钩子执行时,组件实例已解构,this 可能为 null,window.removeEventListener 调用可能失败或静默忽略。beforeDestroy / beforeUnmount 是最后一个能安全访问 this 和响应式系统的时机,确保移除动作可靠执行。

讯飞听见 Win
讯飞听见 Win

PHP中文网为您提供讯飞听见Windows客户端官方下载与安装部署指南。作为科大讯飞旗下的智慧办公SaaS平台,我们为您整理了通过官方渠道安全获取最新完整版安装包(支持Win7至Win11系统)的核心入口。同时,详细梳理了客户端的核心功能与使用技巧,涵盖实时录音转文字、音视频文件批量导入转写、AI智能会议纪要生成、多语种实时翻译及屏幕录制等。

下载
  • 必须与绑定使用同一函数引用,例如:this.handleResize,而非 () => {...}
  • 解绑代码应放在 beforeDestroy(Vue 2)或 onBeforeUnmount(Vue 3 Composition API)中
  • 建议在解绑后手动置空 handler 引用(非必需,但利于调试和 GC)

全局监听器回收要“一一对应”,避免残留

一个 window 事件监听器一旦绑定,就会一直存在,直到显式 remove。若组件被反复创建销毁(如路由切换、v-if 切换),而没正确解绑,监听器会越积越多,导致 resize 触发多次、性能下降甚至卡顿。

  • 每个 addEventListener 都应有且仅有一个对应的 removeEventListener,参数完全一致
  • 不要在多个生命周期钩子里重复绑定同一事件(比如 mounted + activated 都加 resize)
  • 若使用第三方库(如 scrollmagic、intersection-observer),确认其是否自带销毁逻辑;否则需手动清理

更简洁安全的写法(Vue 2/3 均适用)

把绑定/解绑逻辑封装成可复用函数,减少重复出错。例如:

  • Vue 2:用 mixin 提供 addWindowListener(event, handler),内部自动记录并统一在 beforeDestroy 清理
  • Vue 3:在 setup 中用 onBeforeUnmount(() => window.removeEventListener(...)),handler 定义在作用域顶层,保证引用稳定
  • 现代替代方案:优先考虑 useWindowSize() 这类组合式函数(基于 ResizeObserver),比监听 window.resize 更精准、无泄漏风险

前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

1111

5

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

2023.10.09

2285

6

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

2154

13

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

2024.03.22

2345

10

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

2024.05.22

357

5

TypeScript工程化开发与Vite构建优化实践
TypeScript工程化开发与Vite构建优化实践

本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。

2026.02.13

125

17

TypeScript全栈项目架构与接口规范设计
TypeScript全栈项目架构与接口规范设计

本专题面向全栈开发者,系统讲解基于 TypeScript 构建前后端统一技术栈的工程化实践。内容涵盖项目分层设计、接口协议规范、类型共享机制、错误码体系设计、接口自动化生成与文档维护方案。通过完整项目示例,帮助开发者构建结构清晰、类型安全、易维护的现代全栈应用架构。

2026.02.25

355

17

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

2026.03.13

208

19

TypeScript 全栈开发进阶指南
TypeScript 全栈开发进阶指南

面向有 JavaScript 基础的开发者,深入讲解 TypeScript 的类型系统与全栈开发实践。

2026.06.03

98

29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
uni-app快速上手
uni-app快速上手

共0课时 | 0人学习

Vue 教程
Vue 教程

共42课时 | 15.5万人学习

Vue3.x 工具篇--十天技能课堂
Vue3.x 工具篇--十天技能课堂

共26课时 | 2.2万人学习