Skip to content

Commit 07499da

Browse files
committed
fix: add options to $state.raw in classes
1 parent 23df27f commit 07499da

File tree

3 files changed

+106
-1
lines changed

3 files changed

+106
-1
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ export function ClassBody(node, context) {
131131
? b.call('$.assignable_proxy', init, options)
132132
: b.call('$.state', init, options)
133133
: field.kind === 'raw_state'
134-
? b.call('$.state', init)
134+
? b.call('$.state', init, options)
135135
: field.kind === 'derived_by'
136136
? b.call('$.derived', init)
137137
: b.call('$.derived', b.thunk(init));
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import { flushSync } from 'svelte';
2+
import { test } from '../../test';
3+
4+
export default test({
5+
async test({ assert, target, logs }) {
6+
const [btn, btn2, btn3, btn4, btn5, btn6, btn7, btn8, btn9, btn10] =
7+
target.querySelectorAll('button');
8+
flushSync(() => {
9+
btn.click();
10+
});
11+
assert.deepEqual(logs, ['count']);
12+
13+
flushSync(() => {
14+
btn2.click();
15+
});
16+
assert.deepEqual(logs, ['count']);
17+
18+
flushSync(() => {
19+
btn3.click();
20+
});
21+
assert.deepEqual(logs, ['count', 'proxy']);
22+
23+
flushSync(() => {
24+
btn4.click();
25+
});
26+
assert.deepEqual(logs, ['count', 'proxy', 'class count']);
27+
28+
flushSync(() => {
29+
btn5.click();
30+
});
31+
assert.deepEqual(logs, ['count', 'proxy', 'class count']);
32+
33+
flushSync(() => {
34+
btn6.click();
35+
});
36+
assert.deepEqual(logs, ['count', 'proxy', 'class count', 'class proxy']);
37+
38+
flushSync(() => {
39+
btn7.click();
40+
});
41+
assert.deepEqual(logs, ['count', 'proxy', 'class count', 'class proxy']);
42+
43+
flushSync(() => {
44+
btn8.click();
45+
});
46+
assert.deepEqual(logs, ['count', 'proxy', 'class count', 'class proxy']);
47+
48+
flushSync(() => {
49+
btn9.click();
50+
});
51+
assert.deepEqual(logs, ['count', 'proxy', 'class count', 'class proxy']);
52+
53+
flushSync(() => {
54+
btn10.click();
55+
});
56+
assert.deepEqual(logs, ['count', 'proxy', 'class count', 'class proxy', 'arr']);
57+
}
58+
});
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
<script>
2+
let count = $state.raw(0, {
3+
onchange(){
4+
console.log("count");
5+
}
6+
})
7+
8+
let proxy = $state.raw({count: 0}, {
9+
onchange(){
10+
console.log("proxy");
11+
}
12+
})
13+
14+
class Test{
15+
count = $state.raw(0, {
16+
onchange(){
17+
console.log("class count");
18+
}
19+
})
20+
proxy = $state.raw({count: 0}, {
21+
onchange(){
22+
console.log("class proxy");
23+
}
24+
})
25+
}
26+
27+
const class_test = new Test();
28+
29+
let arr = $state.raw([0,1,2], {
30+
onchange(){
31+
console.log("arr");
32+
}
33+
})
34+
</script>
35+
36+
<button onclick={()=> count++}>{count}</button>
37+
<button onclick={()=> proxy.count++}>{proxy.count}</button>
38+
<button onclick={()=> proxy = {count: proxy.count+1}}>{proxy.count}</button>
39+
40+
<button onclick={()=> class_test.count++}>{class_test.count}</button>
41+
<button onclick={()=> class_test.proxy.count++}>{class_test.proxy.count}</button>
42+
<button onclick={()=> class_test.proxy = {count: class_test.proxy.count+1}}>{class_test.proxy.count}</button>
43+
44+
<button onclick={()=> arr.push(arr.length)}>push</button>
45+
<button onclick={()=>arr.splice(0, 2)}>splice</button>
46+
<button onclick={()=>arr.sort((a,b)=>b-a)}>sort</button>
47+
<button onclick={()=>arr = []}>assign</button>

0 commit comments

Comments
 (0)