refactor(runtime-vapor): don't record metadata for `on`

This commit is contained in:
三咲智子 Kevin Deng 2024-03-07 17:44:42 +08:00
parent 280b8cbdab
commit ebd3710d72
No known key found for this signature in database
GPG Key ID: 69992F2250DFD93E
2 changed files with 35 additions and 32 deletions

View File

@ -1,5 +1,6 @@
import { reactive, ref } from '@vue/reactivity' import { reactive, ref } from '@vue/reactivity'
import { import {
delegate,
on, on,
setClass, setClass,
setDOMProp, setDOMProp,
@ -34,7 +35,7 @@ describe('directive: v-model', () => {
const t0 = template('<input />') const t0 = template('<input />')
const n0 = t0() as HTMLInputElement const n0 = t0() as HTMLInputElement
withDirectives(n0, [[vModelDynamic, () => data.value]]) withDirectives(n0, [[vModelDynamic, () => data.value]])
on(n0, 'update:modelValue', () => val => (data.value = val)) delegate(n0, 'update:modelValue', () => val => (data.value = val))
on(n0, 'input', () => () => spy(data.value)) on(n0, 'input', () => () => spy(data.value))
return n0 return n0
}).render() }).render()
@ -66,7 +67,7 @@ describe('directive: v-model', () => {
) )
const n0 = t0() as HTMLInputElement const n0 = t0() as HTMLInputElement
withDirectives(n0, [[vModelSelect, () => data.value]]) withDirectives(n0, [[vModelSelect, () => data.value]])
on(n0, 'update:modelValue', () => val => (data.value = val)) delegate(n0, 'update:modelValue', () => val => (data.value = val))
on(n0, 'change', () => () => spy(data.value)) on(n0, 'change', () => () => spy(data.value))
return n0 return n0
}).render() }).render()
@ -93,7 +94,7 @@ describe('directive: v-model', () => {
setDOMProp(n0, 'type', 'number') setDOMProp(n0, 'type', 'number')
withDirectives(n0, [[vModelDynamic, () => data.value]]) withDirectives(n0, [[vModelDynamic, () => data.value]])
on(n0, 'update:modelValue', () => val => (data.value = val)) delegate(n0, 'update:modelValue', () => val => (data.value = val))
return n0 return n0
}).render() }).render()
@ -117,8 +118,8 @@ describe('directive: v-model', () => {
const t0 = template('<input />') const t0 = template('<input />')
const n0 = t0() as HTMLInputElement const n0 = t0() as HTMLInputElement
withDirectives(n0, [[vModelDynamic, () => data.value]]) withDirectives(n0, [[vModelDynamic, () => data.value]])
on(n0, 'update:modelValue', () => val => (data.value = val)) delegate(n0, 'update:modelValue', () => val => (data.value = val))
on(n0, 'update:modelValue', () => spy) delegate(n0, 'update:modelValue', () => spy)
return n0 return n0
}).render() }).render()
@ -141,7 +142,7 @@ describe('directive: v-model', () => {
const t0 = template('<input />') const t0 = template('<input />')
const n0 = t0() as HTMLInputElement const n0 = t0() as HTMLInputElement
withDirectives(n0, [[vModelDynamic, () => data.value]]) withDirectives(n0, [[vModelDynamic, () => data.value]])
on(n0, 'update:modelValue', () => (toggle.value ? spy1 : spy2)) delegate(n0, 'update:modelValue', () => (toggle.value ? spy1 : spy2))
return n0 return n0
}).render() }).render()
@ -168,7 +169,7 @@ describe('directive: v-model', () => {
const t0 = template('<textarea />') const t0 = template('<textarea />')
const n0 = t0() as HTMLInputElement const n0 = t0() as HTMLInputElement
withDirectives(n0, [[vModelDynamic, () => data.value]]) withDirectives(n0, [[vModelDynamic, () => data.value]])
on(n0, 'update:modelValue', () => val => (data.value = val)) delegate(n0, 'update:modelValue', () => val => (data.value = val))
return n0 return n0
}).render() }).render()
@ -204,14 +205,14 @@ describe('directive: v-model', () => {
withDirectives(input1, [ withDirectives(input1, [
[vModelDynamic, () => data.number, '', { number: true }], [vModelDynamic, () => data.number, '', { number: true }],
]) ])
on(input1, 'update:modelValue', () => val => (data.number = val)) delegate(input1, 'update:modelValue', () => val => (data.number = val))
// trim // trim
setClass(input2, 'trim') setClass(input2, 'trim')
withDirectives(input2, [ withDirectives(input2, [
[vModelDynamic, () => data.trim, '', { trim: true }], [vModelDynamic, () => data.trim, '', { trim: true }],
]) ])
on(input2, 'update:modelValue', () => val => (data.trim = val)) delegate(input2, 'update:modelValue', () => val => (data.trim = val))
// trim & number // trim & number
setClass(input3, 'trim-number') setClass(input3, 'trim-number')
@ -223,14 +224,18 @@ describe('directive: v-model', () => {
{ trim: true, number: true }, { trim: true, number: true },
], ],
]) ])
on(input3, 'update:modelValue', () => val => (data.trimNumber = val)) delegate(
input3,
'update:modelValue',
() => val => (data.trimNumber = val),
)
// lazy // lazy
setClass(input4, 'lazy') setClass(input4, 'lazy')
withDirectives(input4, [ withDirectives(input4, [
[vModelDynamic, () => data.lazy, '', { lazy: true }], [vModelDynamic, () => data.lazy, '', { lazy: true }],
]) ])
on(input4, 'update:modelValue', () => val => (data.lazy = val)) delegate(input4, 'update:modelValue', () => val => (data.lazy = val))
return n0 return n0
}).render() }).render()
@ -282,7 +287,7 @@ describe('directive: v-model', () => {
withDirectives(n1, [ withDirectives(n1, [
[vModelDynamic, () => data.value, '', { number: true }], [vModelDynamic, () => data.value, '', { number: true }],
]) ])
on(n1, 'update:modelValue', () => val => (data.value = val)) delegate(n1, 'update:modelValue', () => val => (data.value = val))
setDOMProps(n2, [ setDOMProps(n2, [
['class', 'bar'], ['class', 'bar'],
@ -294,7 +299,7 @@ describe('directive: v-model', () => {
withDirectives(n2, [ withDirectives(n2, [
[vModelDynamic, () => data.value, '', { lazy: true }], [vModelDynamic, () => data.value, '', { lazy: true }],
]) ])
on(n2, 'update:modelValue', () => val => (data.value = val)) delegate(n2, 'update:modelValue', () => val => (data.value = val))
return n0 return n0
}).render() }).render()
@ -360,7 +365,7 @@ describe('directive: v-model', () => {
const n0 = t0() as HTMLInputElement const n0 = t0() as HTMLInputElement
setDOMProp(n0, 'type', 'checkbox') setDOMProp(n0, 'type', 'checkbox')
withDirectives(n0, [[vModelDynamic, () => data.value]]) withDirectives(n0, [[vModelDynamic, () => data.value]])
on(n0, 'update:modelValue', () => val => (data.value = val)) delegate(n0, 'update:modelValue', () => val => (data.value = val))
return n0 return n0
}).render() }).render()
@ -396,7 +401,7 @@ describe('directive: v-model', () => {
['false-value', 'no'], ['false-value', 'no'],
]) ])
withDirectives(n0, [[vModelDynamic, () => data.value]]) withDirectives(n0, [[vModelDynamic, () => data.value]])
on(n0, 'update:modelValue', () => val => (data.value = val)) delegate(n0, 'update:modelValue', () => val => (data.value = val))
return n0 return n0
}).render() }).render()
@ -434,7 +439,7 @@ describe('directive: v-model', () => {
['false-value', { no: 'no' }], ['false-value', { no: 'no' }],
]) ])
withDirectives(n0, [[vModelDynamic, () => data.value]]) withDirectives(n0, [[vModelDynamic, () => data.value]])
on(n0, 'update:modelValue', () => val => (data.value = val)) delegate(n0, 'update:modelValue', () => val => (data.value = val))
return n0 return n0
}).render() }).render()
@ -470,7 +475,7 @@ describe('directive: v-model', () => {
['value', 'foo'], ['value', 'foo'],
]) ])
withDirectives(n1, [[vModelDynamic, () => data.value]]) withDirectives(n1, [[vModelDynamic, () => data.value]])
on(n1, 'update:modelValue', () => val => (data.value = val)) delegate(n1, 'update:modelValue', () => val => (data.value = val))
setDOMProps(n2, [ setDOMProps(n2, [
['class', 'bar'], ['class', 'bar'],
@ -478,7 +483,7 @@ describe('directive: v-model', () => {
['value', 'bar'], ['value', 'bar'],
]) ])
withDirectives(n2, [[vModelDynamic, () => data.value]]) withDirectives(n2, [[vModelDynamic, () => data.value]])
on(n2, 'update:modelValue', () => val => (data.value = val)) delegate(n2, 'update:modelValue', () => val => (data.value = val))
return n0 return n0
}).render() }).render()
@ -534,7 +539,7 @@ describe('directive: v-model', () => {
['value', 'foo'], ['value', 'foo'],
]) ])
withDirectives(n1, [[vModelDynamic, () => data.value]]) withDirectives(n1, [[vModelDynamic, () => data.value]])
on(n1, 'update:modelValue', () => val => (data.value = val)) delegate(n1, 'update:modelValue', () => val => (data.value = val))
setDOMProps(n2, [ setDOMProps(n2, [
['class', 'bar'], ['class', 'bar'],
@ -542,7 +547,7 @@ describe('directive: v-model', () => {
['value', 'bar'], ['value', 'bar'],
]) ])
withDirectives(n2, [[vModelDynamic, () => data.value]]) withDirectives(n2, [[vModelDynamic, () => data.value]])
on(n2, 'update:modelValue', () => val => (data.value = val)) delegate(n2, 'update:modelValue', () => val => (data.value = val))
return n0 return n0
}).render() }).render()
@ -598,7 +603,7 @@ describe('directive: v-model', () => {
['value', 'foo'], ['value', 'foo'],
]) ])
withDirectives(n1, [[vModelDynamic, () => data.value]]) withDirectives(n1, [[vModelDynamic, () => data.value]])
on(n1, 'update:modelValue', () => val => (data.value = val)) delegate(n1, 'update:modelValue', () => val => (data.value = val))
setDOMProps(n2, [ setDOMProps(n2, [
['class', 'bar'], ['class', 'bar'],
@ -606,7 +611,7 @@ describe('directive: v-model', () => {
['value', 'bar'], ['value', 'bar'],
]) ])
withDirectives(n2, [[vModelDynamic, () => data.value]]) withDirectives(n2, [[vModelDynamic, () => data.value]])
on(n2, 'update:modelValue', () => val => (data.value = val)) delegate(n2, 'update:modelValue', () => val => (data.value = val))
return n0 return n0
}).render() }).render()
@ -651,7 +656,7 @@ describe('directive: v-model', () => {
setDOMProp(n0, 'value', null) setDOMProp(n0, 'value', null)
withDirectives(n0, [[vModelDynamic, () => data.value]]) withDirectives(n0, [[vModelDynamic, () => data.value]])
on(n0, 'update:modelValue', () => val => (data.value = val)) delegate(n0, 'update:modelValue', () => val => (data.value = val))
return n0 return n0
}).render() }).render()
@ -701,7 +706,7 @@ describe('directive: v-model', () => {
['multiple', true], ['multiple', true],
]) ])
withDirectives(n0, [[vModelDynamic, () => data.value]]) withDirectives(n0, [[vModelDynamic, () => data.value]])
on(n0, 'update:modelValue', () => val => (data.value = val)) delegate(n0, 'update:modelValue', () => val => (data.value = val))
return n0 return n0
}).render() }).render()
@ -755,7 +760,7 @@ describe('directive: v-model', () => {
withDirectives(n0, [ withDirectives(n0, [
[vModelDynamic, () => data.value, '', { number: true }], [vModelDynamic, () => data.value, '', { number: true }],
]) ])
on(n0, 'update:modelValue', () => val => (data.value = val)) delegate(n0, 'update:modelValue', () => val => (data.value = val))
return n0 return n0
}).render() }).render()
@ -785,7 +790,7 @@ describe('directive: v-model', () => {
withDirectives(n0, [ withDirectives(n0, [
[vModelDynamic, () => data.value, '', { number: true }], [vModelDynamic, () => data.value, '', { number: true }],
]) ])
on(n0, 'update:modelValue', () => val => (data.value = val)) delegate(n0, 'update:modelValue', () => val => (data.value = val))
return n0 return n0
}).render() }).render()
@ -845,7 +850,7 @@ describe('directive: v-model', () => {
withDirectives(n0, [ withDirectives(n0, [
[vModelDynamic, () => data.value, '', { number: true }], [vModelDynamic, () => data.value, '', { number: true }],
]) ])
on(n0, 'update:modelValue', () => val => (data.value = val)) delegate(n0, 'update:modelValue', () => val => (data.value = val))
return n0 return n0
}).render() }).render()
@ -913,7 +918,7 @@ describe('directive: v-model', () => {
['multiple', true], ['multiple', true],
]) ])
withDirectives(n0, [[vModelDynamic, () => data.value]]) withDirectives(n0, [[vModelDynamic, () => data.value]])
on(n0, 'update:modelValue', () => val => (data.value = val)) delegate(n0, 'update:modelValue', () => val => (data.value = val))
return n0 return n0
}).render() }).render()
@ -976,7 +981,7 @@ describe('directive: v-model', () => {
withDirectives(n0, [ withDirectives(n0, [
[vModelDynamic, () => data.value, '', { number: true }], [vModelDynamic, () => data.value, '', { number: true }],
]) ])
on(n0, 'update:modelValue', () => val => (data.value = val)) delegate(n0, 'update:modelValue', () => val => (data.value = val))
return n0 return n0
}).render() }).render()
@ -1026,7 +1031,7 @@ describe('directive: v-model', () => {
const t0 = template('<input />') const t0 = template('<input />')
const n0 = t0() as HTMLInputElement const n0 = t0() as HTMLInputElement
withDirectives(n0, [[vModelDynamic, () => data.value]]) withDirectives(n0, [[vModelDynamic, () => data.value]])
on(n0, 'update:modelValue', () => val => (data.value = val)) delegate(n0, 'update:modelValue', () => val => (data.value = val))
return n0 return n0
}).render() }).render()

View File

@ -30,7 +30,6 @@ export function on(
ModifierOptions & { effect?: boolean } = {}, ModifierOptions & { effect?: boolean } = {},
) { ) {
const handler: DelegatedHandler = eventHandler(handlerGetter, options) const handler: DelegatedHandler = eventHandler(handlerGetter, options)
const cleanupMetadata = recordEventMetadata(el, event, handler)
let cleanupEvent: (() => void) | undefined let cleanupEvent: (() => void) | undefined
queuePostRenderEffect(() => { queuePostRenderEffect(() => {
cleanupEvent = addEventListener(el, event, handler, options) cleanupEvent = addEventListener(el, event, handler, options)
@ -43,7 +42,6 @@ export function on(
} }
function cleanup() { function cleanup() {
cleanupMetadata()
cleanupEvent && cleanupEvent() cleanupEvent && cleanupEvent()
} }
} }