From cd0e323fbebbcb332400b28a686af540b631f88d Mon Sep 17 00:00:00 2001 From: daiwei Date: Fri, 16 May 2025 21:59:47 +0800 Subject: [PATCH] fix(runtime-core): avoid side effects when invoking emit handler --- packages/runtime-core/src/componentEmits.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/runtime-core/src/componentEmits.ts b/packages/runtime-core/src/componentEmits.ts index db52bc88c3..0014754d8b 100644 --- a/packages/runtime-core/src/componentEmits.ts +++ b/packages/runtime-core/src/componentEmits.ts @@ -32,6 +32,7 @@ import { import type { ComponentTypeEmits } from './apiSetupHelpers' import { getModelModifiers } from './helpers/useModel' import type { ComponentPublicInstance } from './componentPublicInstance' +import { pauseTracking, resetTracking } from '@vue/reactivity' export type ObjectEmitsOptions = Record< string, @@ -198,12 +199,14 @@ export function emit( } if (handler) { + pauseTracking() callWithAsyncErrorHandling( handler, instance, ErrorCodes.COMPONENT_EVENT_HANDLER, args, ) + resetTracking() } const onceHandler = props[handlerName + `Once`] @@ -214,12 +217,14 @@ export function emit( return } instance.emitted[handlerName] = true + pauseTracking() callWithAsyncErrorHandling( onceHandler, instance, ErrorCodes.COMPONENT_EVENT_HANDLER, args, ) + resetTracking() } if (__COMPAT__) { -- 2.47.2