mirror of https://github.com/sveltejs/svelte
fix: ensure top level snippets are defined when binding to component prop (#11104)
...by hoisting top level snippets out of the binding loop in ssr mode fixes #11086pull/11111/head
parent
4d0b743918
commit
27891cb2dd
@ -0,0 +1,5 @@
|
||||
---
|
||||
"svelte": patch
|
||||
---
|
||||
|
||||
fix: ensure top level snippets are defined when binding to component prop
|
@ -0,0 +1,39 @@
|
||||
// index.svelte (Svelte VERSION)
|
||||
// Note: compiler output will change before 5.0 is released!
|
||||
import "svelte/internal/disclose-version";
|
||||
import * as $ from "svelte/internal/client";
|
||||
import TextInput from './Child.svelte';
|
||||
|
||||
var root_1 = $.template(`Something`, 1);
|
||||
var root = $.template(`<!> `, 1);
|
||||
|
||||
export default function Bind_component_snippet($$anchor, $$props) {
|
||||
$.push($$props, true);
|
||||
|
||||
let value = $.source('');
|
||||
const _snippet = snippet;
|
||||
var fragment_1 = root();
|
||||
|
||||
function snippet($$anchor) {
|
||||
var fragment = root_1();
|
||||
|
||||
$.append($$anchor, fragment);
|
||||
}
|
||||
|
||||
var node = $.first_child(fragment_1);
|
||||
|
||||
TextInput(node, {
|
||||
get value() {
|
||||
return $.get(value);
|
||||
},
|
||||
set value($$value) {
|
||||
$.set(value, $.proxy($$value));
|
||||
}
|
||||
});
|
||||
|
||||
var text = $.sibling(node, true);
|
||||
|
||||
$.render_effect(() => $.set_text(text, ` value: ${$.stringify($.get(value))}`));
|
||||
$.append($$anchor, fragment_1);
|
||||
$.pop();
|
||||
}
|
@ -0,0 +1,43 @@
|
||||
// index.svelte (Svelte VERSION)
|
||||
// Note: compiler output will change before 5.0 is released!
|
||||
import * as $ from "svelte/internal/server";
|
||||
import TextInput from './Child.svelte';
|
||||
|
||||
export default function Bind_component_snippet($$payload, $$props) {
|
||||
$.push(true);
|
||||
|
||||
let value = '';
|
||||
const _snippet = snippet;
|
||||
|
||||
function snippet($$payload) {
|
||||
$$payload.out += `Something`;
|
||||
}
|
||||
|
||||
let $$settled = true;
|
||||
let $$inner_payload;
|
||||
|
||||
function $$render_inner($$payload) {
|
||||
$$payload.out += `<!--[-->`;
|
||||
|
||||
TextInput($$payload, {
|
||||
get value() {
|
||||
return value;
|
||||
},
|
||||
set value($$value) {
|
||||
value = $$value;
|
||||
$$settled = false;
|
||||
}
|
||||
});
|
||||
|
||||
$$payload.out += `<!--]--> value: ${$.escape(value)}`;
|
||||
};
|
||||
|
||||
do {
|
||||
$$settled = true;
|
||||
$$inner_payload = $.copy_payload($$payload);
|
||||
$$render_inner($$inner_payload);
|
||||
} while (!$$settled);
|
||||
|
||||
$.assign_payload($$payload, $$inner_payload);
|
||||
$.pop();
|
||||
}
|
@ -0,0 +1,13 @@
|
||||
<script>
|
||||
import TextInput from './Child.svelte';
|
||||
|
||||
let value = $state('');
|
||||
const _snippet = snippet;
|
||||
</script>
|
||||
|
||||
{#snippet snippet()}
|
||||
Something
|
||||
{/snippet}
|
||||
|
||||
<TextInput bind:value />
|
||||
value: {value}
|
Loading…
Reference in new issue