diff --git a/.changeset/rotten-lizards-remember.md b/.changeset/rotten-lizards-remember.md new file mode 100644 index 000000000000..187f39f44731 --- /dev/null +++ b/.changeset/rotten-lizards-remember.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: reuse already attached attachments from spread attributes diff --git a/packages/svelte/src/internal/client/dom/elements/attributes.js b/packages/svelte/src/internal/client/dom/elements/attributes.js index 3d1acbd31ce1..407c3c69e725 100644 --- a/packages/svelte/src/internal/client/dom/elements/attributes.js +++ b/packages/svelte/src/internal/client/dom/elements/attributes.js @@ -448,7 +448,10 @@ export function set_attributes(element, prev, next, css_hash, skip_warning = fal } for (let symbol of Object.getOwnPropertySymbols(next)) { - if (symbol.description === ATTACHMENT_KEY) { + if ( + symbol.description === ATTACHMENT_KEY && + (prev == undefined || !(symbol in prev) || prev[symbol] !== next[symbol]) + ) { attach(element, () => next[symbol]); } }