Skip to content

Commit 2cd5c29

Browse files
Timothy JohnsonConduitry
authored andcommitted
propagate changes through slots with props (sveltejs#4091)
1 parent f9a9484 commit 2cd5c29

File tree

5 files changed

+31
-5
lines changed

5 files changed

+31
-5
lines changed

src/compiler/compile/render_dom/wrappers/InlineComponent/index.ts

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -182,11 +182,9 @@ export default class InlineComponentWrapper extends Wrapper {
182182
});
183183
});
184184

185-
const non_let_dependencies = Array.from(fragment_dependencies).filter(name => !this.node.scope.is_let(name));
186-
187185
const dynamic_attributes = this.node.attributes.filter(a => a.get_dependencies().length > 0);
188186

189-
if (!uses_spread && (dynamic_attributes.length > 0 || this.node.bindings.length > 0 || non_let_dependencies.length > 0)) {
187+
if (!uses_spread && (dynamic_attributes.length > 0 || this.node.bindings.length > 0 || fragment_dependencies.size > 0)) {
190188
updates.push(b`const ${name_changes} = {};`);
191189
}
192190

@@ -266,9 +264,9 @@ export default class InlineComponentWrapper extends Wrapper {
266264
}
267265
}
268266

269-
if (non_let_dependencies.length > 0) {
267+
if (fragment_dependencies.size > 0) {
270268
updates.push(b`
271-
if (${renderer.dirty(non_let_dependencies)}) {
269+
if (${renderer.dirty(Array.from(fragment_dependencies))}) {
272270
${name_changes}.$$scope = { dirty: #dirty, ctx: #ctx };
273271
}`);
274272
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<slot/>
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<script>
2+
export let prop
3+
</script>
4+
5+
<slot value={prop} />
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
export default {
2+
props: {
3+
prop: 'a',
4+
},
5+
6+
html: 'a',
7+
8+
test({ assert, component, target }) {
9+
component.prop = 'b';
10+
assert.htmlEqual( target.innerHTML, 'b' );
11+
}
12+
};
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<script>
2+
import Outer from './Outer.svelte'
3+
import Inner from './Inner.svelte'
4+
5+
export let prop
6+
</script>
7+
8+
<Outer {prop} let:value>
9+
<Inner>{value}</Inner>
10+
</Outer>

0 commit comments

Comments
 (0)