From: edison Date: Mon, 6 Dec 2021 05:58:45 +0000 (+0800) Subject: fix(runtime-core): handle initial undefined attrs (#5017) X-Git-Tag: v3.2.24~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6d887aaf591cfa05d5fea978bbd87e3e502bfa86;p=thirdparty%2Fvuejs%2Fcore.git fix(runtime-core): handle initial undefined attrs (#5017) fix #5016 --- diff --git a/packages/runtime-core/__tests__/componentProps.spec.ts b/packages/runtime-core/__tests__/componentProps.spec.ts index 863b12d069..40725dfcd1 100644 --- a/packages/runtime-core/__tests__/componentProps.spec.ts +++ b/packages/runtime-core/__tests__/componentProps.spec.ts @@ -573,4 +573,26 @@ describe('component props', () => { render(h(Comp, { foo: null }), root) }).not.toThrow() }) + + // #5016 + test('handling attr with undefined value', () => { + const Comp = { + render(this: any) { + return JSON.stringify(this.$attrs) + Object.keys(this.$attrs) + } + } + const root = nodeOps.createElement('div') + + let attrs: any = { foo: undefined } + + render(h(Comp, attrs), root) + expect(serializeInner(root)).toBe( + JSON.stringify(attrs) + Object.keys(attrs) + ) + + render(h(Comp, (attrs = { foo: 'bar' })), root) + expect(serializeInner(root)).toBe( + JSON.stringify(attrs) + Object.keys(attrs) + ) + }) }) diff --git a/packages/runtime-core/src/componentProps.ts b/packages/runtime-core/src/componentProps.ts index c999492225..cf73261fc5 100644 --- a/packages/runtime-core/src/componentProps.ts +++ b/packages/runtime-core/src/componentProps.ts @@ -369,7 +369,7 @@ function setFullProps( continue } } - if (value !== attrs[key]) { + if (!(key in attrs) || value !== attrs[key]) { attrs[key] = value hasAttrsChanged = true }