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,
): 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
})

View 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 {