From 5452404b71e4957649af04a3a351ac7bcafd30b6 Mon Sep 17 00:00:00 2001 From: zhiyuanzmj <260480378@qq.com> Date: Fri, 28 Feb 2025 17:06:19 +0800 Subject: [PATCH] feat(compiler-vapor): add jsx support for setText and createTextNode (#12893) --- packages/compiler-vapor/src/generators/text.ts | 13 +++++++------ packages/compiler-vapor/src/ir/index.ts | 2 ++ 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/packages/compiler-vapor/src/generators/text.ts b/packages/compiler-vapor/src/generators/text.ts index 3c9835f88..280d0a918 100644 --- a/packages/compiler-vapor/src/generators/text.ts +++ b/packages/compiler-vapor/src/generators/text.ts @@ -14,8 +14,8 @@ export function genSetText( context: CodegenContext, ): CodeFragment[] { const { helper } = context - const { element, values, generated } = oper - const texts = combineValues(values, context) + const { element, values, generated, jsx } = oper + const texts = combineValues(values, context, jsx) return [ NEWLINE, ...genCall(helper('setText'), `${generated ? 'x' : 'n'}${element}`, texts), @@ -27,13 +27,13 @@ export function genCreateTextNode( context: CodegenContext, ): CodeFragment[] { const { helper } = context - const { id, values } = oper + const { id, values, jsx } = oper return [ NEWLINE, `const n${id} = `, ...genCall( helper('createTextNode'), - values && combineValues(values, context), + values && combineValues(values, context, jsx), ), ] } @@ -41,15 +41,16 @@ export function genCreateTextNode( function combineValues( values: SimpleExpressionNode[], context: CodegenContext, + jsx?: boolean, ): CodeFragment[] { return values.flatMap((value, i) => { let exp = genExpression(value, context) - if (getLiteralExpressionValue(value) == null) { + if (!jsx && getLiteralExpressionValue(value) == null) { // dynamic, wrap with toDisplayString exp = genCall(context.helper('toDisplayString'), exp) } if (i > 0) { - exp.unshift(' + ') + exp.unshift(jsx ? ', ' : ' + ') } return exp }) diff --git a/packages/compiler-vapor/src/ir/index.ts b/packages/compiler-vapor/src/ir/index.ts index 1509d3742..6616e35e9 100644 --- a/packages/compiler-vapor/src/ir/index.ts +++ b/packages/compiler-vapor/src/ir/index.ts @@ -121,6 +121,7 @@ export interface SetTextIRNode extends BaseIRNode { element: number values: SimpleExpressionNode[] generated?: boolean // whether this is a generated empty text node by `processTextLikeContainer` + jsx?: boolean } export type KeyOverride = [find: string, replacement: string] @@ -161,6 +162,7 @@ export interface CreateTextNodeIRNode extends BaseIRNode { type: IRNodeTypes.CREATE_TEXT_NODE id: number values?: SimpleExpressionNode[] + jsx?: boolean } export interface InsertNodeIRNode extends BaseIRNode {