feat(compiler-vapor): add jsx support for setText and createTextNode (#12893)
This commit is contained in:
parent
a95b5e70e6
commit
5452404b71
|
@ -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
|
||||||
})
|
})
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
Loading…
Reference in New Issue