From 60d777d228414515cc32526ad72a53ef070501be Mon Sep 17 00:00:00 2001 From: Evan You Date: Fri, 26 Mar 2021 16:29:40 -0400 Subject: [PATCH] fix(runtime-core): fix erraneous emits warnings w/ mixins fix #2651 --- .../runtime-core/__tests__/componentEmits.spec.ts | 15 +++++++++++++++ packages/runtime-core/src/componentEmits.ts | 7 +++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/packages/runtime-core/__tests__/componentEmits.spec.ts b/packages/runtime-core/__tests__/componentEmits.spec.ts index 1eb216d9f09..a02cbb880c1 100644 --- a/packages/runtime-core/__tests__/componentEmits.spec.ts +++ b/packages/runtime-core/__tests__/componentEmits.spec.ts @@ -175,6 +175,21 @@ describe('component: emit', () => { expect(`event validation failed for event "foo"`).toHaveBeenWarned() }) + // #2651 + test('should not attach normalized object when mixins do not contain emits', () => { + const Foo = defineComponent({ + mixins: [{}], + render() {}, + created() { + this.$emit('foo') + } + }) + render(h(Foo), nodeOps.createElement('div')) + expect( + `Component emitted event "foo" but it is neither declared` + ).not.toHaveBeenWarned() + }) + test('.once', () => { const Foo = defineComponent({ render() {}, diff --git a/packages/runtime-core/src/componentEmits.ts b/packages/runtime-core/src/componentEmits.ts index 81af34e6708..6d6ca4aaed8 100644 --- a/packages/runtime-core/src/componentEmits.ts +++ b/packages/runtime-core/src/componentEmits.ts @@ -165,8 +165,11 @@ export function normalizeEmitsOptions( let hasExtends = false if (__FEATURE_OPTIONS_API__ && !isFunction(comp)) { const extendEmits = (raw: ComponentOptions) => { - hasExtends = true - extend(normalized, normalizeEmitsOptions(raw, appContext, true)) + const normalizedFromExtend = normalizeEmitsOptions(raw, appContext, true) + if (normalizedFromExtend) { + hasExtends = true + extend(normalized, normalizedFromExtend) + } } if (!asMixin && appContext.mixins.length) { appContext.mixins.forEach(extendEmits)