Skip to content

Commit ade66c6

Browse files
fix: use get in constructor for deriveds (#15300)
Co-authored-by: Rich Harris <[email protected]>
1 parent 83d0c58 commit ade66c6

File tree

4 files changed

+31
-1
lines changed

4 files changed

+31
-1
lines changed

.changeset/new-cherries-leave.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'svelte': patch
3+
---
4+
5+
fix: use `get` in constructor for deriveds

packages/svelte/src/compiler/phases/3-transform/client/visitors/MemberExpression.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@ export function MemberExpression(node, context) {
1111
if (node.property.type === 'PrivateIdentifier') {
1212
const field = context.state.private_state.get(node.property.name);
1313
if (field) {
14-
return context.state.in_constructor ? b.member(node, 'v') : b.call('$.get', node);
14+
return context.state.in_constructor && (field.kind === 'raw_state' || field.kind === 'state')
15+
? b.member(node, 'v')
16+
: b.call('$.get', node);
1517
}
1618
}
1719

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import { test } from '../../test';
2+
3+
export default test({
4+
html: `<p>state,derived state,derived.by derived state</p>`
5+
});
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<script>
2+
class Foo {
3+
#state = $state('state')
4+
#derived = $derived('derived ' + this.#state);
5+
#derivedBy = $derived.by(() => {
6+
return 'derived.by ' + this.#derived
7+
});
8+
9+
initial
10+
11+
constructor() {
12+
this.initial = [this.#state, this.#derived, this.#derivedBy]
13+
}
14+
}
15+
const foo = new Foo()
16+
</script>
17+
18+
<p>{foo.initial}</p>

0 commit comments

Comments
 (0)