Skip to content

Commit 60d777d

Browse files
committed
fix(runtime-core): fix erraneous emits warnings w/ mixins
fix #2651
1 parent d5824b9 commit 60d777d

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed

packages/runtime-core/__tests__/componentEmits.spec.ts

+15
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,21 @@ describe('component: emit', () => {
175175
expect(`event validation failed for event "foo"`).toHaveBeenWarned()
176176
})
177177

178+
// #2651
179+
test('should not attach normalized object when mixins do not contain emits', () => {
180+
const Foo = defineComponent({
181+
mixins: [{}],
182+
render() {},
183+
created() {
184+
this.$emit('foo')
185+
}
186+
})
187+
render(h(Foo), nodeOps.createElement('div'))
188+
expect(
189+
`Component emitted event "foo" but it is neither declared`
190+
).not.toHaveBeenWarned()
191+
})
192+
178193
test('.once', () => {
179194
const Foo = defineComponent({
180195
render() {},

packages/runtime-core/src/componentEmits.ts

+5-2
Original file line numberDiff line numberDiff line change
@@ -165,8 +165,11 @@ export function normalizeEmitsOptions(
165165
let hasExtends = false
166166
if (__FEATURE_OPTIONS_API__ && !isFunction(comp)) {
167167
const extendEmits = (raw: ComponentOptions) => {
168-
hasExtends = true
169-
extend(normalized, normalizeEmitsOptions(raw, appContext, true))
168+
const normalizedFromExtend = normalizeEmitsOptions(raw, appContext, true)
169+
if (normalizedFromExtend) {
170+
hasExtends = true
171+
extend(normalized, normalizedFromExtend)
172+
}
170173
}
171174
if (!asMixin && appContext.mixins.length) {
172175
appContext.mixins.forEach(extendEmits)

0 commit comments

Comments
 (0)