From 17be36a6fa5ba3b11d06cc4a68a557776184d906 Mon Sep 17 00:00:00 2001 From: smirk9581 Date: Mon, 25 May 2026 18:01:19 +0800 Subject: [PATCH 01/12] =?UTF-8?q?docs:=20=E6=9B=B4=E6=96=B0=E6=A0=B9?= =?UTF-8?q?=E7=9B=AE=E5=BD=95=20README=20=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.en.md | 2 +- README.ja.md | 4 ++-- README.md | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/README.en.md b/README.en.md index 6a99b76c..e99fc50b 100644 --- a/README.en.md +++ b/README.en.md @@ -11,7 +11,7 @@ > It converts Vue 3 SFCs, scripts, and styles into pure React without a runtime bridge, with full > ` From 24d3a7f41570d3792bd68e5809bc45fec2358284 Mon Sep 17 00:00:00 2001 From: smirk9581 Date: Tue, 26 May 2026 09:33:53 +0800 Subject: [PATCH 08/12] =?UTF-8?q?chore(compiler-core):=20=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E7=89=88=E6=9C=AC=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/compiler-core/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/compiler-core/package.json b/packages/compiler-core/package.json index 174c918a..2fe84658 100644 --- a/packages/compiler-core/package.json +++ b/packages/compiler-core/package.json @@ -1,6 +1,6 @@ { "name": "@vureact/compiler-core", - "version": "1.8.4", + "version": "1.8.5", "description": "Migrate Vue to React, or write React in Vue syntax.", "author": "Ruihong Zhong (Ryan John)", "license": "MIT", @@ -99,4 +99,4 @@ "engines": { "node": ">=19.0.0" } -} \ No newline at end of file +} From ac3a8a6499a3e284496c124a304026c5d36a6239 Mon Sep 17 00:00:00 2001 From: smirk9581 Date: Tue, 26 May 2026 09:34:01 +0800 Subject: [PATCH 09/12] =?UTF-8?q?fix(compiler-core):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=20JSX=20=E4=BB=A3=E7=A0=81=E7=94=9F=E6=88=90=E5=85=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/compiler-core/src/core/codegen/component/jsx/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/compiler-core/src/core/codegen/component/jsx/index.ts b/packages/compiler-core/src/core/codegen/component/jsx/index.ts index 14207991..34fd13fd 100644 --- a/packages/compiler-core/src/core/codegen/component/jsx/index.ts +++ b/packages/compiler-core/src/core/codegen/component/jsx/index.ts @@ -7,7 +7,7 @@ export function buildJSX( nodeIR: TemplateBlockIR | null, ctx: ICompilationContext, ): JSXChild | null { - if (!nodeIR?.children.length) { + if (!nodeIR?.children.length && ctx.inputType !== 'sfc') { return null; } From 9ad58434d59d41a5b98407e5058d929c51dbee24 Mon Sep 17 00:00:00 2001 From: smirk9581 Date: Tue, 26 May 2026 09:34:07 +0800 Subject: [PATCH 10/12] =?UTF-8?q?fix(compiler-core):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=20JSX=20=E8=AF=AD=E6=B3=95=E5=A4=84=E7=90=86=E5=99=A8=E5=85=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/codegen/component/jsx/syntax-processor/index.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/compiler-core/src/core/codegen/component/jsx/syntax-processor/index.ts b/packages/compiler-core/src/core/codegen/component/jsx/syntax-processor/index.ts index f90ab810..be1c857f 100644 --- a/packages/compiler-core/src/core/codegen/component/jsx/syntax-processor/index.ts +++ b/packages/compiler-core/src/core/codegen/component/jsx/syntax-processor/index.ts @@ -21,13 +21,17 @@ export type JsxProcessor = ( state: JsxBuildState, ) => void; -export function buildJSXChild(nodeIR: TemplateBlockIR, ctx: ICompilationContext): JSXChild | null { +export function buildJSXChild( + nodeIR: TemplateBlockIR | null, + ctx: ICompilationContext, +): JSXChild | null { + const templateIR = nodeIR || { children: [] }; const state: JsxBuildState = { rootChildren: [], result: null, }; - jsxBuilder(nodeIR, ctx, state, { + jsxBuilder(templateIR, ctx, state, { preprocess: [], process: [buildJsxChildrenProcessor], postprocess: [buildRootJsxProcessor], From edce771a09acb0f83de2010b62ca871a2c078000 Mon Sep 17 00:00:00 2001 From: smirk9581 Date: Tue, 26 May 2026 09:34:16 +0800 Subject: [PATCH 11/12] =?UTF-8?q?fix(compiler-core):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=20JSX=20=E6=A0=B9=E8=8A=82=E7=82=B9=E6=9E=84=E5=BB=BA=E5=90=8E?= =?UTF-8?q?=E5=A4=84=E7=90=86=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../postprocess/build-root-jsx.ts | 33 +++++++++++++++---- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/packages/compiler-core/src/core/codegen/component/jsx/syntax-processor/postprocess/build-root-jsx.ts b/packages/compiler-core/src/core/codegen/component/jsx/syntax-processor/postprocess/build-root-jsx.ts index 54924022..9ddf09c0 100644 --- a/packages/compiler-core/src/core/codegen/component/jsx/syntax-processor/postprocess/build-root-jsx.ts +++ b/packages/compiler-core/src/core/codegen/component/jsx/syntax-processor/postprocess/build-root-jsx.ts @@ -1,3 +1,4 @@ +import { JSXElement, JSXFragment } from '@babel/types'; import { ICompilationContext } from '@compiler/context/types'; import { TemplateBlockIR } from '@src/core/transform/sfc/template'; import { JsxBuildState } from '..'; @@ -9,19 +10,37 @@ export function buildRootJsxProcessor( ctx: ICompilationContext, state: JsxBuildState, ) { - if (!state.rootChildren.length) { - state.result = null; + const { rootChildren } = state; + const { provide } = ctx.scriptData; + + const hasProvide = provide.isOccupied; + const hasChildren = rootChildren.length > 0; // 是否有任意 jsx 节点 + + const setResult = (elem?: JSXElement | JSXFragment) => { + state.result = elem ?? null; + }; + + // 如果存在上下文提供者 + if (hasProvide) { + const provider = buildCtxProviderNode(provide, ctx, rootChildren); + + // fix: https://github.com/vureact-js/core/issues/51 + if (!hasChildren) { + // 根节点没有 children 时,创建一个包含提供者的片段节点 + setResult(buildFragmentNode([provider])); + } else { + setResult(provider); + } + return; } - const { provide } = ctx.scriptData; - - if (provide.isOccupied) { - state.result = buildCtxProviderNode(provide, ctx, state.rootChildren); + if (!hasChildren) { + setResult(); return; } - state.result = buildFragmentNode(state.rootChildren); + setResult(buildFragmentNode(rootChildren)); void nodeIR; } From 9f6525df6321a722f37dfbe561302f3200c50e2c Mon Sep 17 00:00:00 2001 From: smirk9581 Date: Tue, 26 May 2026 09:34:24 +0800 Subject: [PATCH 12/12] =?UTF-8?q?test(compiler-core):=20=E6=B8=85=E7=90=86?= =?UTF-8?q?=20api-transform=20=E6=B5=8B=E8=AF=95=E7=94=A8=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/core/transform/__tests__/api-transform/index.vue | 4 ---- 1 file changed, 4 deletions(-) diff --git a/packages/compiler-core/src/core/transform/__tests__/api-transform/index.vue b/packages/compiler-core/src/core/transform/__tests__/api-transform/index.vue index e003e181..91ffa693 100644 --- a/packages/compiler-core/src/core/transform/__tests__/api-transform/index.vue +++ b/packages/compiler-core/src/core/transform/__tests__/api-transform/index.vue @@ -1,7 +1,3 @@ - -