Skip to content

Commit 5d6bb2f

Browse files
committed
fix #15386
1 parent 4f63f9d commit 5d6bb2f

File tree

2 files changed

+12
-9
lines changed

2 files changed

+12
-9
lines changed

packages/svelte/src/internal/client/dom/elements/attributes.js

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -326,8 +326,16 @@ export function set_attributes(
326326
continue;
327327
}
328328

329+
if (key === 'class') {
330+
var is_html = element.namespaceURI === 'http://www.w3.org/1999/xhtml';
331+
set_class(element, is_html, value, css_hash, prev?.[CLASS], next[CLASS]);
332+
current[key] = value;
333+
current[CLASS] = next[CLASS];
334+
continue;
335+
}
336+
329337
var prev_value = current[key];
330-
if (value === prev_value && key !== 'class') continue;
338+
if (value === prev_value) continue;
331339

332340
current[key] = value;
333341

@@ -377,9 +385,6 @@ export function set_attributes(
377385
// @ts-ignore
378386
element[`__${event_name}`] = undefined;
379387
}
380-
} else if (key === 'class') {
381-
var is_html = element.namespaceURI === 'http://www.w3.org/1999/xhtml';
382-
set_class(element, is_html, value, css_hash, prev?.[CLASS], next[CLASS]);
383388
} else if (key === 'style' && value != null) {
384389
element.style.cssText = value + '';
385390
} else if (key === 'autofocus') {

packages/svelte/src/internal/client/dom/elements/class.js

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ import { hydrating } from '../hydration.js';
66
* @param {boolean | number} is_html
77
* @param {string | null} value
88
* @param {string} [hash]
9-
* @param {Record<string, boolean>} [prev_classes]
10-
* @param {Record<string, boolean>} [next_classes]
9+
* @param {Record<string, any>} [prev_classes]
10+
* @param {Record<string, any>} [next_classes]
1111
* @returns {Record<string, boolean> | undefined}
1212
*/
1313
export function set_class(dom, is_html, value, hash, prev_classes, next_classes) {
@@ -34,12 +34,10 @@ export function set_class(dom, is_html, value, hash, prev_classes, next_classes)
3434
// @ts-expect-error need to add __className to patched prototype
3535
dom.__className = value;
3636
} else if (next_classes) {
37-
prev_classes ??= {};
38-
3937
for (var key in next_classes) {
4038
var is_present = !!next_classes[key];
4139

42-
if (is_present !== !!prev_classes[key]) {
40+
if (prev_classes == null || is_present !== !!prev_classes[key]) {
4341
dom.classList.toggle(key, is_present);
4442
}
4543
}

0 commit comments

Comments
 (0)