]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
fix(runtime-dom): remove class attribute on nullish values
authorEvan You <yyx990803@gmail.com>
Thu, 15 Jul 2021 17:45:43 +0000 (13:45 -0400)
committerEvan You <yyx990803@gmail.com>
Thu, 15 Jul 2021 17:45:43 +0000 (13:45 -0400)
close #3173

packages/runtime-dom/src/modules/class.ts

index d26867d9a068d5f5c3d17a8e5fc5f1d8410a29a0..6eecf64169ff8ab525af732ccea4a4ebfd2c5fbf 100644 (file)
@@ -3,22 +3,21 @@ import { ElementWithTransition } from '../components/Transition'
 // compiler should normalize class + :class bindings on the same element
 // into a single binding ['staticClass', dynamic]
 export function patchClass(el: Element, value: string | null, isSVG: boolean) {
-  if (value == null) {
-    value = ''
+  // directly setting className should be faster than setAttribute in theory
+  // if this is an element during a transition, take the temporary transition
+  // classes into account.
+  const transitionClasses = (el as ElementWithTransition)._vtc
+  if (transitionClasses) {
+    value = (value
+      ? [value, ...transitionClasses]
+      : [...transitionClasses]
+    ).join(' ')
   }
-  if (isSVG) {
+  if (value == null) {
+    el.removeAttribute('class')
+  } else if (isSVG) {
     el.setAttribute('class', value)
   } else {
-    // directly setting className should be faster than setAttribute in theory
-    // if this is an element during a transition, take the temporary transition
-    // classes into account.
-    const transitionClasses = (el as ElementWithTransition)._vtc
-    if (transitionClasses) {
-      value = (value
-        ? [value, ...transitionClasses]
-        : [...transitionClasses]
-      ).join(' ')
-    }
     el.className = value
   }
 }