]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
feat(compiler-vapor): add jsx support for setText and createTextNode (#12893)
authorzhiyuanzmj <260480378@qq.com>
Fri, 28 Feb 2025 09:06:19 +0000 (17:06 +0800)
committerGitHub <noreply@github.com>
Fri, 28 Feb 2025 09:06:19 +0000 (17:06 +0800)
packages/compiler-vapor/src/generators/text.ts
packages/compiler-vapor/src/ir/index.ts

index 3c9835f88b8318f9049bf6f53347902c054f2972..280d0a9183b66c9acfe03c7ddaaa5e41ac9be778 100644 (file)
@@ -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
   })
index 1509d37424cd12afd35e06dc222214d25b497441..6616e35e91ce38f81ff36b18adf5c6037878c78f 100644 (file)
@@ -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 {