Skip to content

vue组件里写的原生addEventListeners监听事件,要手动去销毁吗?为什么?

Posted on:2024年8月10日 at 17:07

在 Vue 组件中,如果你使用 addEventListener 添加了原生的 DOM 事件监听器,通常需要在组件销毁时手动移除这些监听器。

原因如下:

  1. 内存泄漏: 如果不手动移除事件监听器,监听器会继续存在于内存中,即使对应的 DOM 元素已经被移除。这会导致内存泄漏,因为监听器持有对 DOM 元素的引用,导致垃圾回收机制无法回收这些元素。

  2. 意外行为: 如果监听器没有被移除,在组件销毁后这些监听器可能会继续响应事件,这可能导致应用程序的意外行为或错误。

  3. 性能问题: 随着时间的推移,未移除的事件监听器会堆积,导致性能下降,尤其是在频繁创建和销毁组件的情况下。

在 Vue 组件中,可以利用生命周期钩子来添加和移除事件监听器:

<template>
  <div ref="myElement">点击我</div>
</template>

<script>
export default {
  mounted() {
    // 在组件挂载时添加事件监听器
    this.$refs.myElement.addEventListener("click", this.handleClick);
  },
  beforeDestroy() {
    // 在组件销毁前移除事件监听器
    this.$refs.myElement.removeEventListener("click", this.handleClick);
  },
  methods: {
    handleClick(event) {
      console.log("元素被点击了");
    },
  },
};
</script>
原文转自:https://fe.ecool.fun/topic/0f2dd6c7-8484-4b6c-b081-f241376cef77