fix: put expressions in effects unless known to be static

pull/15792/head
Rich Harris 5 months ago
parent 7f473f618d
commit 14642b830b

@ -0,0 +1,5 @@
---
'svelte': patch
---
fix: put expressions in effects unless known to be static

@ -90,7 +90,8 @@ export function Identifier(node, context) {
if (binding) {
if (context.state.expression) {
context.state.expression.dependencies.add(binding);
context.state.expression.has_state ||= binding.kind !== 'normal';
context.state.expression.has_state ||=
!binding.is_function() && !context.state.scope.evaluate(node).is_known;
}
if (

@ -0,0 +1,13 @@
import { flushSync } from '../../../../src/index-client';
import { test } from '../../test';
export default test({
html: `<button>0</button>`,
test({ assert, target }) {
const btn = target.querySelector('button');
flushSync(() => btn?.click());
assert.htmlEqual(target.innerHTML, `<button>1</button>`);
}
});

@ -0,0 +1,13 @@
<script>
let count = $state(0);
let object = {
toString() {
return count;
}
};
</script>
<button onclick={() => count += 1}>
{object}
</button>
Loading…
Cancel
Save