Skip to content

Commit

Permalink
fix(runtime-core): use separate emits caches for components and mixins
Browse files Browse the repository at this point in the history
  • Loading branch information
gcaaa31928 committed Oct 11, 2024
1 parent 770ea67 commit ce27cfd
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 1 deletion.
41 changes: 41 additions & 0 deletions packages/runtime-core/__tests__/componentEmits.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

import {
type ComponentPublicInstance,
createApp,
defineComponent,
h,
nextTick,
Expand Down Expand Up @@ -598,4 +599,44 @@ describe('component: emit', () => {
render(h(ComponentC), el)
expect(renderFn).toHaveBeenCalledTimes(1)
})
test('merging emits for a component that is also used as a mixin', () => {
const render = () => h('div')
const CompA = {
render,
}
const validateByMixin = vi.fn(() => true)
const validateByGlobalMixin = vi.fn(() => true)

const mixin = {
emits: {
one: validateByMixin,
},
}

const CompB = defineComponent({
mixins: [mixin, CompA],
created(this) {
this.$emit('one', 1)
},
render,
})

const app = createApp({
render() {
return [h(CompA), h(CompB)]
},
})

app.mixin({
emits: {
one: validateByGlobalMixin,
two: null,
},
})

const root = nodeOps.createElement('div')
app.mount(root)
expect(validateByMixin).toHaveBeenCalledTimes(1)
expect(validateByGlobalMixin).not.toHaveBeenCalled()
})
})
4 changes: 3 additions & 1 deletion packages/runtime-core/src/componentEmits.ts
Original file line number Diff line number Diff line change
Expand Up @@ -228,12 +228,14 @@ export function emit(
}
}

const mixinEmitsCache = new WeakMap<ConcreteComponent, ObjectEmitsOptions>()
export function normalizeEmitsOptions(
comp: ConcreteComponent,
appContext: AppContext,
asMixin = false,
): ObjectEmitsOptions | null {
const cache = appContext.emitsCache
const cache =
__FEATURE_OPTIONS_API__ && asMixin ? mixinEmitsCache : appContext.emitsCache
const cached = cache.get(comp)
if (cached !== undefined) {
return cached
Expand Down

0 comments on commit ce27cfd

Please sign in to comment.