From: daiwei Date: Fri, 16 May 2025 13:59:47 +0000 (+0800) Subject: fix(runtime-core): avoid side effects when invoking emit handler X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F13340%2Fhead;p=thirdparty%2Fvuejs%2Fcore.git fix(runtime-core): avoid side effects when invoking emit handler --- 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__) {