diff --git a/.changeset/flat-coats-crash.md b/.changeset/flat-coats-crash.md new file mode 100644 index 000000000..c493e3559 --- /dev/null +++ b/.changeset/flat-coats-crash.md @@ -0,0 +1,5 @@ +--- +'astro': patch +--- + +Fix edge case where default slots could be rendered too early for Astro components. Slots are now only rendered on demand. diff --git a/packages/astro/src/runtime/server/index.ts b/packages/astro/src/runtime/server/index.ts index 61ad2d0e7..0a1543e72 100644 --- a/packages/astro/src/runtime/server/index.ts +++ b/packages/astro/src/runtime/server/index.ts @@ -150,9 +150,8 @@ export async function renderComponent( slots: any = {} ) { Component = await Component; - const children = await renderSlot(result, slots?.default); - if (Component === Fragment) { + const children = await renderSlot(result, slots?.default); if (children == null) { return children; } @@ -197,6 +196,7 @@ Did you mean to add ${formatList(probableRendererNames.map((r) => '`' + r + '`') throw new Error(message); } + const children = await renderSlot(result, slots?.default); // Call the renderers `check` hook to see if any claim this component. let renderer: SSRLoadedRenderer | undefined; if (metadata.hydrate !== 'only') {