fix(runtime-core): fix multiple .once event handlers on same component (#3904)
fix #3902
This commit is contained in:
parent
2b52d5d7c5
commit
011dee8644
@ -245,21 +245,27 @@ describe('component: emit', () => {
|
||||
const Foo = defineComponent({
|
||||
render() {},
|
||||
emits: {
|
||||
foo: null
|
||||
foo: null,
|
||||
bar: null
|
||||
},
|
||||
created() {
|
||||
this.$emit('foo')
|
||||
this.$emit('foo')
|
||||
this.$emit('bar')
|
||||
this.$emit('bar')
|
||||
}
|
||||
})
|
||||
const fn = jest.fn()
|
||||
const barFn = jest.fn()
|
||||
render(
|
||||
h(Foo, {
|
||||
onFooOnce: fn
|
||||
onFooOnce: fn,
|
||||
onBarOnce: barFn
|
||||
}),
|
||||
nodeOps.createElement('div')
|
||||
)
|
||||
expect(fn).toHaveBeenCalledTimes(1)
|
||||
expect(barFn).toHaveBeenCalledTimes(1)
|
||||
})
|
||||
|
||||
test('.once with normal listener of the same name', () => {
|
||||
|
@ -149,10 +149,11 @@ export function emit(
|
||||
const onceHandler = props[handlerName + `Once`]
|
||||
if (onceHandler) {
|
||||
if (!instance.emitted) {
|
||||
;(instance.emitted = {} as Record<string, boolean>)[handlerName] = true
|
||||
instance.emitted = {} as Record<any, boolean>
|
||||
} else if (instance.emitted[handlerName]) {
|
||||
return
|
||||
}
|
||||
instance.emitted[handlerName] = true
|
||||
callWithAsyncErrorHandling(
|
||||
onceHandler,
|
||||
instance,
|
||||
|
Loading…
Reference in New Issue
Block a user