fix: add slotFlags for implicit default slots

This commit is contained in:
Kael 2025-02-19 19:03:10 +11:00
parent 5e77d5d5e5
commit 453d99f906
2 changed files with 13 additions and 4 deletions

View File

@ -512,7 +512,11 @@ const transformJSXElement = (
) { ) {
VNodeChild = t.objectExpression([ VNodeChild = t.objectExpression([
t.objectProperty(t.identifier('default'), child), t.objectProperty(t.identifier('default'), child),
]); optimize && t.objectProperty(
t.identifier('_'),
t.numericLiteral(slotFlag),
) as any,
].filter(Boolean));
} else if (t.isObjectExpression(child)) { } else if (t.isObjectExpression(child)) {
VNodeChild = t.objectExpression( VNodeChild = t.objectExpression(
[ [
@ -526,9 +530,13 @@ const transformJSXElement = (
? t.objectExpression([ ? t.objectExpression([
t.objectProperty( t.objectProperty(
t.identifier('default'), t.identifier('default'),
t.arrowFunctionExpression([], t.arrayExpression([child])) t.arrowFunctionExpression([], child),
), ),
]) optimize && t.objectProperty(
t.identifier('_'),
t.numericLiteral(slotFlag),
) as any,
].filter(Boolean))
: t.arrayExpression([child]); : t.arrayExpression([child]);
} }
} }

View File

@ -164,7 +164,8 @@ _createVNode(_resolveComponent("A"), null, {
exports[`passing object slots via JSX children single expression, function expression > single expression, function expression 1`] = ` exports[`passing object slots via JSX children single expression, function expression > single expression, function expression 1`] = `
"import { resolveComponent as _resolveComponent, createVNode as _createVNode } from "vue"; "import { resolveComponent as _resolveComponent, createVNode as _createVNode } from "vue";
_createVNode(_resolveComponent("A"), null, { _createVNode(_resolveComponent("A"), null, {
default: () => "foo" default: () => "foo",
_: 1
});" });"
`; `;