diff --git a/packages/babel-plugin-jsx/src/transform-vue-jsx.ts b/packages/babel-plugin-jsx/src/transform-vue-jsx.ts index 8b32e44..e6f8155 100644 --- a/packages/babel-plugin-jsx/src/transform-vue-jsx.ts +++ b/packages/babel-plugin-jsx/src/transform-vue-jsx.ts @@ -531,7 +531,11 @@ const transformJSXElement = ( ) { VNodeChild = t.objectExpression([ t.objectProperty(t.identifier('default'), child), - ]); + optimize && t.objectProperty( + t.identifier('_'), + t.numericLiteral(slotFlag), + ) as any, + ].filter(Boolean)); } else if (t.isObjectExpression(child)) { VNodeChild = t.objectExpression( [ @@ -545,9 +549,13 @@ const transformJSXElement = ( ? t.objectExpression([ t.objectProperty( 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]); } } diff --git a/packages/babel-plugin-jsx/test/__snapshots__/snapshot.test.ts.snap b/packages/babel-plugin-jsx/test/__snapshots__/snapshot.test.ts.snap index c4c2f98..c5cd390 100644 --- a/packages/babel-plugin-jsx/test/__snapshots__/snapshot.test.ts.snap +++ b/packages/babel-plugin-jsx/test/__snapshots__/snapshot.test.ts.snap @@ -208,7 +208,8 @@ _createVNode(_Fragment, null, [_createVNode(_resolveComponent("A"), null, { 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"; _createVNode(_resolveComponent("A"), null, { - default: () => "foo" + default: () => "foo", + _: 1 });" `;