Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions .changeset/plenty-wasps-sleep.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
'svelte': patch
---

fix: ensure undefined attributes are removed during hydration

Attributes set server-side but undefined on the client should be removed during hydration.
This ensures expected cleanup behavior and resolves a mismatch between SSR and client-side rendering.

Fixes sveltejs/kit#13890
Original file line number Diff line number Diff line change
Expand Up @@ -345,7 +345,11 @@ export function set_attributes(element, prev, next, css_hash, skip_warning = fal
}

var prev_value = current[key];
if (value === prev_value) continue;

// Skip if value is unchanged, unless it's `undefined` and the element still has the attribute
if (value === prev_value && !(value === undefined && element.hasAttribute(key))) {
continue;
}

current[key] = value;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { test } from '../../test';

export default test({
server_props: {
browser: false
},

props: {
browser: true
}
});
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<!--[--><div></div><!--]-->
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<script>
const { browser } = $props();

const attributes = {
"data-test": browser ? undefined : ""
};
</script>

<div {...attributes}></div>