From c4936b3dd844876ba502357c107094d335e52739 Mon Sep 17 00:00:00 2001 From: freakzlike Date: Tue, 4 Oct 2022 16:55:23 +0200 Subject: [PATCH] fix: cleanup event listeners on unmount --- src/vueWrapper.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/vueWrapper.ts b/src/vueWrapper.ts index b398e12af..4f91bbaa6 100644 --- a/src/vueWrapper.ts +++ b/src/vueWrapper.ts @@ -35,6 +35,7 @@ export class VueWrapper< private rootVM: ComponentPublicInstance | undefined | null private __app: App | null private __setProps: ((props: Record) => void) | undefined + private cleanUpCallbacks: Array<() => void> = [] constructor( app: App | null, @@ -149,8 +150,12 @@ export class VueWrapper< // @see https://github.com/vuejs/rfcs/blob/master/active-rfcs/0030-emits-option.md#fallthrough-control if (emits.includes(eventName)) continue - element.addEventListener(eventName, (...args) => { + const eventListener: EventListener = (...args) => { recordEvent(vm.$, eventName, args) + } + element.addEventListener(eventName, eventListener) + this.cleanUpCallbacks.push(() => { + element.removeEventListener(eventName, eventListener) }) } } @@ -214,6 +219,9 @@ export class VueWrapper< // Clear emitted events cache for this component instance removeEventHistory(this.vm) + this.cleanUpCallbacks.forEach((cb) => cb()) + this.cleanUpCallbacks = [] + this.__app.unmount() } }