diff --git a/packages/shared/createEventHook/index.ts b/packages/shared/createEventHook/index.ts index 2ad7074b93b..64a21f35358 100644 --- a/packages/shared/createEventHook/index.ts +++ b/packages/shared/createEventHook/index.ts @@ -2,6 +2,7 @@ * The source code for this function was inspired by vue-apollo's `useEventHook` util * https://github.com/vuejs/vue-apollo/blob/v4/packages/vue-apollo-composable/src/util/useEventHook.ts */ +import { tryOnScopeDispose } from '@vueuse/core' export type EventHookOn = (fn: (param: T) => void) => { off: () => void } export type EventHookOff = (fn: (param: T) => void) => void @@ -30,6 +31,10 @@ export function createEventHook(): EventHook { const on = (fn: (param: T) => void) => { fns.push(fn) + tryOnScopeDispose(() => { + off(fn) + }) + return { off: () => off(fn), }