Skip to content

Commit

Permalink
fix(runtime-core): ensure custom events are not emitted anymore after…
Browse files Browse the repository at this point in the history
… unmount. (#5679)

close #5674
  • Loading branch information
LinusBorg committed Apr 14, 2022
1 parent 8e29ef6 commit 71c9536
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 1 deletion.
28 changes: 27 additions & 1 deletion packages/runtime-core/__tests__/componentEmits.spec.ts
Expand Up @@ -6,7 +6,8 @@ import {
defineComponent,
h,
nodeOps,
toHandlers
toHandlers,
nextTick
} from '@vue/runtime-test'
import { isEmitListener } from '../src/componentEmits'

Expand Down Expand Up @@ -374,4 +375,29 @@ describe('component: emit', () => {
// PascalCase option
expect(isEmitListener(options, 'onFooBaz')).toBe(true)
})

test('does not emit after unmount', async () => {
const fn = jest.fn()
const Foo = defineComponent({
emits: ['closing'],
async beforeUnmount() {
await this.$nextTick()
this.$emit('closing', true)
},
render() {
return h('div')
}
})
const Comp = () =>
h(Foo, {
onClosing: fn
})

const el = nodeOps.createElement('div')
render(h(Comp), el)
await nextTick()
render(null, el)
await nextTick()
expect(fn).not.toHaveBeenCalled()
})
})
1 change: 1 addition & 0 deletions packages/runtime-core/src/componentEmits.ts
Expand Up @@ -73,6 +73,7 @@ export function emit(
event: string,
...rawArgs: any[]
) {
if (instance.isUnmounted) return
const props = instance.vnode.props || EMPTY_OBJ

if (__DEV__) {
Expand Down

0 comments on commit 71c9536

Please sign in to comment.