From 94ed09628dba6038744c88bd1d1d932a85093479 Mon Sep 17 00:00:00 2001 From: Dominic Gannaway Date: Sat, 17 Aug 2024 16:08:44 +0100 Subject: [PATCH] fix: correctly ensure prop bindings are reactive when bound (#12879) * fix: correctly ensure prop bindings are reactive when bound * oops * Apply suggestions from code review * Update packages/svelte/src/compiler/phases/3-transform/client/utils.js --------- Co-authored-by: Rich Harris --- .changeset/eighty-days-wave.md | 5 +++++ .../phases/3-transform/client/utils.js | 2 +- .../samples/binding-value-prop/Field.svelte | 5 +++++ .../samples/binding-value-prop/_config.js | 22 +++++++++++++++++++ .../samples/binding-value-prop/main.svelte | 9 ++++++++ 5 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 .changeset/eighty-days-wave.md create mode 100644 packages/svelte/tests/runtime-legacy/samples/binding-value-prop/Field.svelte create mode 100644 packages/svelte/tests/runtime-legacy/samples/binding-value-prop/_config.js create mode 100644 packages/svelte/tests/runtime-legacy/samples/binding-value-prop/main.svelte diff --git a/.changeset/eighty-days-wave.md b/.changeset/eighty-days-wave.md new file mode 100644 index 0000000000..86da3748e8 --- /dev/null +++ b/.changeset/eighty-days-wave.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: correctly ensure prop bindings are reactive when bound diff --git a/packages/svelte/src/compiler/phases/3-transform/client/utils.js b/packages/svelte/src/compiler/phases/3-transform/client/utils.js index 35283aed72..7d662629da 100644 --- a/packages/svelte/src/compiler/phases/3-transform/client/utils.js +++ b/packages/svelte/src/compiler/phases/3-transform/client/utils.js @@ -186,7 +186,7 @@ export function get_prop_source(binding, state, name, initial) { state.analysis.accessors || (state.analysis.immutable ? binding.reassigned || (state.analysis.runes && binding.mutated) - : binding.mutated) + : binding.updated) ) { flags |= PROPS_IS_UPDATED; } diff --git a/packages/svelte/tests/runtime-legacy/samples/binding-value-prop/Field.svelte b/packages/svelte/tests/runtime-legacy/samples/binding-value-prop/Field.svelte new file mode 100644 index 0000000000..b3bfeab84f --- /dev/null +++ b/packages/svelte/tests/runtime-legacy/samples/binding-value-prop/Field.svelte @@ -0,0 +1,5 @@ + + + diff --git a/packages/svelte/tests/runtime-legacy/samples/binding-value-prop/_config.js b/packages/svelte/tests/runtime-legacy/samples/binding-value-prop/_config.js new file mode 100644 index 0000000000..11ff60ca1e --- /dev/null +++ b/packages/svelte/tests/runtime-legacy/samples/binding-value-prop/_config.js @@ -0,0 +1,22 @@ +import { flushSync } from 'svelte'; +import { ok, test } from '../../test'; + +export default test({ + accessors: false, + html: `\naaa`, + ssrHtml: `\naaa`, + + test({ assert, target }) { + const input = target.querySelector('input'); + ok(input); + + const event = new window.Event('input'); + + input.value = 'aaa2'; + input.dispatchEvent(event); + + flushSync(); + + assert.htmlEqual(target.innerHTML, `\naaa2`); + } +}); diff --git a/packages/svelte/tests/runtime-legacy/samples/binding-value-prop/main.svelte b/packages/svelte/tests/runtime-legacy/samples/binding-value-prop/main.svelte new file mode 100644 index 0000000000..4352cb65cd --- /dev/null +++ b/packages/svelte/tests/runtime-legacy/samples/binding-value-prop/main.svelte @@ -0,0 +1,9 @@ + + + {$value}