소스 검색

fix(ssr): respect case when rendering dynamic attrs on svg

fix #6755
Evan You 3 년 전
부모
커밋
121eb32fb0
2개의 변경된 파일14개의 추가작업 그리고 3개의 파일을 삭제
  1. 11 0
      packages/server-renderer/__tests__/ssrRenderAttrs.spec.ts
  2. 3 3
      packages/server-renderer/src/helpers/ssrRenderAttrs.ts

+ 11 - 0
packages/server-renderer/__tests__/ssrRenderAttrs.spec.ts

@@ -98,6 +98,17 @@ describe('ssr: renderAttrs', () => {
       )
     ).toBe(` fooBar="ok"`)
   })
+
+  test('preserve name on svg elements', () => {
+    expect(
+      ssrRenderAttrs(
+        {
+          viewBox: 'foo'
+        },
+        'svg'
+      )
+    ).toBe(` viewBox="foo"`)
+  })
 })
 
 describe('ssr: renderAttr', () => {

+ 3 - 3
packages/server-renderer/src/helpers/ssrRenderAttrs.ts

@@ -1,4 +1,4 @@
-import { escapeHtml, stringifyStyle } from '@vue/shared'
+import { escapeHtml, isSVGTag, stringifyStyle } from '@vue/shared'
 import {
   normalizeClass,
   normalizeStyle,
@@ -51,8 +51,8 @@ export function ssrRenderDynamicAttr(
     return ``
   }
   const attrKey =
-    tag && tag.indexOf('-') > 0
-      ? key // preserve raw name on custom elements
+    tag && (tag.indexOf('-') > 0 || isSVGTag(tag))
+      ? key // preserve raw name on custom elements and svg
       : propsToAttrMap[key] || key.toLowerCase()
   if (isBooleanAttr(attrKey)) {
     return includeBooleanAttr(value) ? ` ${attrKey}` : ``