From bbd99f99a91a908383dfee6df3c261ec4574e63e Mon Sep 17 00:00:00 2001 From: Thorsten Luenborg Date: Thu, 20 Jan 2022 22:31:45 +0100 Subject: [PATCH 1/2] fix(runtime-core): ensure mergeProps skips undefined event handlers --- packages/runtime-core/__tests__/vnode.spec.ts | 4 ++++ packages/runtime-core/src/vnode.ts | 3 ++- packages/runtime-dom/src/modules/events.ts | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/runtime-core/__tests__/vnode.spec.ts b/packages/runtime-core/__tests__/vnode.spec.ts index a8979e811dc..fdd23797b10 100644 --- a/packages/runtime-core/__tests__/vnode.spec.ts +++ b/packages/runtime-core/__tests__/vnode.spec.ts @@ -446,6 +446,10 @@ describe('vnode', () => { onClick: [clickHandler1, clickHandler2], onFocus: focusHandler2 }) + let props3: Data = { onClick: undefined } + expect(mergeProps(props1, props3)).toMatchObject({ + onClick: clickHandler1 + }) }) test('default', () => { diff --git a/packages/runtime-core/src/vnode.ts b/packages/runtime-core/src/vnode.ts index 0db4005c877..52495ba05d7 100644 --- a/packages/runtime-core/src/vnode.ts +++ b/packages/runtime-core/src/vnode.ts @@ -799,7 +799,8 @@ export function mergeProps(...args: (Data & VNodeProps)[]) { const incoming = toMerge[key] if ( existing !== incoming && - !(isArray(existing) && existing.includes(incoming)) + !(isArray(existing) && existing.includes(incoming)) && + incoming ) { ret[key] = existing ? [].concat(existing as any, incoming as any) diff --git a/packages/runtime-dom/src/modules/events.ts b/packages/runtime-dom/src/modules/events.ts index 7172e3efdd2..51544dedf49 100644 --- a/packages/runtime-dom/src/modules/events.ts +++ b/packages/runtime-dom/src/modules/events.ts @@ -141,7 +141,7 @@ function patchStopImmediatePropagation( originalStop.call(e) ;(e as any)._stopped = true } - return value.map(fn => (e: Event) => !(e as any)._stopped && fn(e)) + return value.map(fn => (e: Event) => !(e as any)._stopped && fn && fn(e)) } else { return value } From 93557afc1920b7ff7ece8d659a761e9b4516ca7a Mon Sep 17 00:00:00 2001 From: Evan You Date: Fri, 21 Jan 2022 01:11:24 -0500 Subject: [PATCH 2/2] Update vnode.ts --- packages/runtime-core/src/vnode.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/runtime-core/src/vnode.ts b/packages/runtime-core/src/vnode.ts index 52495ba05d7..059d8ba3a29 100644 --- a/packages/runtime-core/src/vnode.ts +++ b/packages/runtime-core/src/vnode.ts @@ -798,9 +798,9 @@ export function mergeProps(...args: (Data & VNodeProps)[]) { const existing = ret[key] const incoming = toMerge[key] if ( + incoming && existing !== incoming && - !(isArray(existing) && existing.includes(incoming)) && - incoming + !(isArray(existing) && existing.includes(incoming)) ) { ret[key] = existing ? [].concat(existing as any, incoming as any)