diff --git a/packages/compiler-dom/src/transforms/stringifyStatic.ts b/packages/compiler-dom/src/transforms/stringifyStatic.ts index 0b47cb435b0..f4d3492c176 100644 --- a/packages/compiler-dom/src/transforms/stringifyStatic.ts +++ b/packages/compiler-dom/src/transforms/stringifyStatic.ts @@ -26,6 +26,7 @@ import { toDisplayString, normalizeClass, normalizeStyle, + stringifyClass, stringifyStyle, makeMap, isKnownSvgAttr, @@ -311,7 +312,7 @@ function stringifyElement( if (evaluated != null) { const arg = p.arg && (p.arg as SimpleExpressionNode).content if (arg === 'class') { - evaluated = normalizeClass(evaluated) + evaluated = stringifyClass(normalizeClass(evaluated)) } else if (arg === 'style') { evaluated = stringifyStyle(normalizeStyle(evaluated)) } diff --git a/packages/shared/__tests__/normalizeProp.spec.ts b/packages/shared/__tests__/normalizeProp.spec.ts index a3cb104c003..f2272bbf86a 100644 --- a/packages/shared/__tests__/normalizeProp.spec.ts +++ b/packages/shared/__tests__/normalizeProp.spec.ts @@ -17,6 +17,12 @@ describe('normalizeClass', () => { ) }) + // #3173 + test('handles null and undefined correctly', () => { + expect(normalizeClass(undefined)).toEqual(undefined) + expect(normalizeClass(null)).toEqual(undefined) + }) + // #6777 test('parse multi-line inline style', () => { expect( diff --git a/packages/shared/src/normalizeProp.ts b/packages/shared/src/normalizeProp.ts index 10d54c6b51a..8e4e297e6e8 100644 --- a/packages/shared/src/normalizeProp.ts +++ b/packages/shared/src/normalizeProp.ts @@ -60,7 +60,13 @@ export function stringifyStyle( return ret } -export function normalizeClass(value: unknown): string { +export function stringifyClass(klass: string | undefined): string { + return klass || '' +} + +export function normalizeClass(value: unknown): string | undefined { + // #3173 + if (value == null) return undefined let res = '' if (isString(value)) { res = value