File tree 6 files changed +27
-7
lines changed
src/compiler/compile/render_dom/wrappers/InlineComponent
test/runtime/samples/dynamic-component-spread-props
6 files changed +27
-7
lines changed Original file line number Diff line number Diff line change
1
+ ---
2
+ ' svelte ' : patch
3
+ ---
4
+
5
+ fix: properly update ` svelte:component ` props when there are spread props
Original file line number Diff line number Diff line change @@ -277,14 +277,13 @@ export default class InlineComponentWrapper extends Wrapper {
277
277
// statements will become switch_props function body
278
278
// rewrite last statement, add props update logic
279
279
statements [ statements . length - 1 ] = b `
280
+ for (let #i = 0; #i < ${ levels } .length; #i += 1) {
281
+ ${ props } = @assign(${ props } , ${ levels } [#i]);
282
+ }
280
283
if (#dirty !== undefined && ${ condition } ) {
281
- ${ props } = @get_spread_update(${ levels } , [
284
+ ${ props } = @assign( ${ props } , @ get_spread_update(${ levels } , [
282
285
${ changes }
283
- ]);
284
- } else {
285
- for (let #i = 0; #i < ${ levels } .length; #i += 1) {
286
- ${ props } = @assign(${ props } , ${ levels } [#i]);
287
- }
286
+ ]));
288
287
}
289
288
` ;
290
289
}
Original file line number Diff line number Diff line change 1
1
<script >
2
2
export let value;
3
+ export let foo;
4
+ export let cb;
3
5
</script >
4
6
5
7
<p >value(1) = {value }</p >
8
+ <p >foo={foo }</p >
9
+ <p >typeof cb={typeof cb }</p >
Original file line number Diff line number Diff line change 1
1
<script >
2
2
export let value;
3
+ export let foo;
4
+ export let cb;
3
5
</script >
4
6
5
7
<p >value(2) = {value }</p >
8
+ <p >foo={foo }</p >
9
+ <p >typeof cb={typeof cb }</p >
Original file line number Diff line number Diff line change 1
1
export default {
2
2
html : `
3
3
<p>value(1) = 1</p>
4
+ <p>foo=bar</p>
5
+ <p>typeof cb=function</p>
4
6
<button>Toggle Component</button>
5
7
` ,
6
8
@@ -11,6 +13,8 @@ export default {
11
13
target . innerHTML ,
12
14
`
13
15
<p>value(2) = 2</p>
16
+ <p>foo=bar</p>
17
+ <p>typeof cb=function</p>
14
18
<button>Toggle Component</button>
15
19
`
16
20
) ;
@@ -19,6 +23,8 @@ export default {
19
23
target . innerHTML ,
20
24
`
21
25
<p>value(1) = 1</p>
26
+ <p>foo=bar</p>
27
+ <p>typeof cb=function</p>
22
28
<button>Toggle Component</button>
23
29
`
24
30
) ;
Original file line number Diff line number Diff line change 5
5
let view = Comp1;
6
6
7
7
$: props = view === Comp1 ? { value: 1 } : { value: 2 };
8
+ const bar = " bar" ;
9
+ function cb () {}
8
10
</script >
9
11
10
- <svelte:component this ={view } {...props } />
12
+ <svelte:component this ={view } {...props } foo ={ bar } { cb } />
11
13
12
14
<button on:click ={(e ) => (view = view === Comp1 ? Comp2 : Comp1 )}>Toggle Component</button >
You can’t perform that action at this time.
0 commit comments