Skip to content

Commit 0b7f508

Browse files
authored
refactor(runtime-vapor): cache event handlers on element (#12610)
1 parent 679cbdf commit 0b7f508

File tree

2 files changed

+8
-33
lines changed

2 files changed

+8
-33
lines changed

packages/runtime-vapor/src/componentMetadata.ts

-25
This file was deleted.

packages/runtime-vapor/src/dom/event.ts

+8-8
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,8 @@ import {
33
onEffectCleanup,
44
onScopeDispose,
55
} from '@vue/reactivity'
6-
import {
7-
MetadataKind,
8-
getMetadata,
9-
recordEventMetadata,
10-
} from '../componentMetadata'
116
import { queuePostFlushCb } from '@vue/runtime-dom'
7+
import { remove } from '@vue/shared'
128

139
export function addEventListener(
1410
el: Element,
@@ -49,13 +45,17 @@ export type DelegatedHandler = {
4945
}
5046

5147
export function delegate(
52-
el: HTMLElement,
48+
el: any,
5349
event: string,
5450
handlerGetter: () => undefined | ((...args: any[]) => any),
5551
): void {
5652
const handler: DelegatedHandler = eventHandler(handlerGetter)
5753
handler.delegate = true
58-
recordEventMetadata(el, event, handler)
54+
55+
const cacheKey = `$evt${event}`
56+
const handlers: DelegatedHandler[] = el[cacheKey] || (el[cacheKey] = [])
57+
handlers.push(handler)
58+
onScopeDispose(() => remove(handlers, handler))
5959
}
6060

6161
function eventHandler(getter: () => undefined | ((...args: any[]) => any)) {
@@ -98,7 +98,7 @@ const delegatedEventHandler = (e: Event) => {
9898
},
9999
})
100100
while (node !== null) {
101-
const handlers = getMetadata(node)[MetadataKind.event][e.type]
101+
const handlers = node[`$evt${e.type}`] as DelegatedHandler[]
102102
if (handlers) {
103103
for (const handler of handlers) {
104104
if (handler.delegate && !node.disabled) {

0 commit comments

Comments
 (0)