feat(compiler-vapor): add jsx support for setText and createTextNode (#12893)

This commit is contained in:
zhiyuanzmj 2025-02-28 17:06:19 +08:00 committed by GitHub
parent a95b5e70e6
commit 5452404b71
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 9 additions and 6 deletions

View File

@ -14,8 +14,8 @@ export function genSetText(
context: CodegenContext, context: CodegenContext,
): CodeFragment[] { ): CodeFragment[] {
const { helper } = context const { helper } = context
const { element, values, generated } = oper const { element, values, generated, jsx } = oper
const texts = combineValues(values, context) const texts = combineValues(values, context, jsx)
return [ return [
NEWLINE, NEWLINE,
...genCall(helper('setText'), `${generated ? 'x' : 'n'}${element}`, texts), ...genCall(helper('setText'), `${generated ? 'x' : 'n'}${element}`, texts),
@ -27,13 +27,13 @@ export function genCreateTextNode(
context: CodegenContext, context: CodegenContext,
): CodeFragment[] { ): CodeFragment[] {
const { helper } = context const { helper } = context
const { id, values } = oper const { id, values, jsx } = oper
return [ return [
NEWLINE, NEWLINE,
`const n${id} = `, `const n${id} = `,
...genCall( ...genCall(
helper('createTextNode'), helper('createTextNode'),
values && combineValues(values, context), values && combineValues(values, context, jsx),
), ),
] ]
} }
@ -41,15 +41,16 @@ export function genCreateTextNode(
function combineValues( function combineValues(
values: SimpleExpressionNode[], values: SimpleExpressionNode[],
context: CodegenContext, context: CodegenContext,
jsx?: boolean,
): CodeFragment[] { ): CodeFragment[] {
return values.flatMap((value, i) => { return values.flatMap((value, i) => {
let exp = genExpression(value, context) let exp = genExpression(value, context)
if (getLiteralExpressionValue(value) == null) { if (!jsx && getLiteralExpressionValue(value) == null) {
// dynamic, wrap with toDisplayString // dynamic, wrap with toDisplayString
exp = genCall(context.helper('toDisplayString'), exp) exp = genCall(context.helper('toDisplayString'), exp)
} }
if (i > 0) { if (i > 0) {
exp.unshift(' + ') exp.unshift(jsx ? ', ' : ' + ')
} }
return exp return exp
}) })

View File

@ -121,6 +121,7 @@ export interface SetTextIRNode extends BaseIRNode {
element: number element: number
values: SimpleExpressionNode[] values: SimpleExpressionNode[]
generated?: boolean // whether this is a generated empty text node by `processTextLikeContainer` generated?: boolean // whether this is a generated empty text node by `processTextLikeContainer`
jsx?: boolean
} }
export type KeyOverride = [find: string, replacement: string] export type KeyOverride = [find: string, replacement: string]
@ -161,6 +162,7 @@ export interface CreateTextNodeIRNode extends BaseIRNode {
type: IRNodeTypes.CREATE_TEXT_NODE type: IRNodeTypes.CREATE_TEXT_NODE
id: number id: number
values?: SimpleExpressionNode[] values?: SimpleExpressionNode[]
jsx?: boolean
} }
export interface InsertNodeIRNode extends BaseIRNode { export interface InsertNodeIRNode extends BaseIRNode {