File tree Expand file tree Collapse file tree 6 files changed +27
-7
lines changed
src/compiler/compile/render_dom/wrappers/InlineComponent
test/runtime/samples/dynamic-component-spread-props Expand file tree Collapse file tree 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 {
277277 // statements will become switch_props function body
278278 // rewrite last statement, add props update logic
279279 statements [ statements . length - 1 ] = b `
280+ for (let #i = 0; #i < ${ levels } .length; #i += 1) {
281+ ${ props } = @assign(${ props } , ${ levels } [#i]);
282+ }
280283 if (#dirty !== undefined && ${ condition } ) {
281- ${ props } = @get_spread_update(${ levels } , [
284+ ${ props } = @assign( ${ props } , @ get_spread_update(${ levels } , [
282285 ${ changes }
283- ]);
284- } else {
285- for (let #i = 0; #i < ${ levels } .length; #i += 1) {
286- ${ props } = @assign(${ props } , ${ levels } [#i]);
287- }
286+ ]));
288287 }
289288 ` ;
290289 }
Original file line number Diff line number Diff line change 11<script >
22 export let value;
3+ export let foo;
4+ export let cb;
35 </script >
46
57<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 11<script >
22 export let value;
3+ export let foo;
4+ export let cb;
35 </script >
46
57<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 11export default {
22 html : `
33 <p>value(1) = 1</p>
4+ <p>foo=bar</p>
5+ <p>typeof cb=function</p>
46 <button>Toggle Component</button>
57 ` ,
68
@@ -11,6 +13,8 @@ export default {
1113 target . innerHTML ,
1214 `
1315 <p>value(2) = 2</p>
16+ <p>foo=bar</p>
17+ <p>typeof cb=function</p>
1418 <button>Toggle Component</button>
1519 `
1620 ) ;
@@ -19,6 +23,8 @@ export default {
1923 target . innerHTML ,
2024 `
2125 <p>value(1) = 1</p>
26+ <p>foo=bar</p>
27+ <p>typeof cb=function</p>
2228 <button>Toggle Component</button>
2329 `
2430 ) ;
Original file line number Diff line number Diff line change 55 let view = Comp1;
66
77 $: props = view === Comp1 ? { value: 1 } : { value: 2 };
8+ const bar = " bar" ;
9+ function cb () {}
810 </script >
911
10- <svelte:component this ={view } {...props } />
12+ <svelte:component this ={view } {...props } foo ={ bar } { cb } />
1113
1214<button on:click ={(e ) => (view = view === Comp1 ? Comp2 : Comp1 )}>Toggle Component</button >
You can’t perform that action at this time.
0 commit comments