|
|
@@ -9,13 +9,33 @@ export function genSetText(
|
|
|
oper: SetTextIRNode,
|
|
|
context: CodegenContext,
|
|
|
): CodeFragment[] {
|
|
|
- const { helper } = context
|
|
|
+ const {
|
|
|
+ helper,
|
|
|
+ block: { dynamicComponents },
|
|
|
+ } = context
|
|
|
const { element, values, generated, jsx } = oper
|
|
|
const texts = combineValues(values, context, jsx)
|
|
|
- return [
|
|
|
- NEWLINE,
|
|
|
- ...genCall(helper('setText'), `${generated ? 'x' : 'n'}${element}`, texts),
|
|
|
- ]
|
|
|
+
|
|
|
+ // if the element is a dynamic component, we need to use `setElementText`
|
|
|
+ // to set the textContent of the VaporFragment's nodes.
|
|
|
+ return dynamicComponents.includes(oper.element)
|
|
|
+ ? [
|
|
|
+ NEWLINE,
|
|
|
+ ...genCall(
|
|
|
+ helper('setElementText'),
|
|
|
+ `n${element}.nodes`,
|
|
|
+ texts,
|
|
|
+ 'true', // isConverted
|
|
|
+ ),
|
|
|
+ ]
|
|
|
+ : [
|
|
|
+ NEWLINE,
|
|
|
+ ...genCall(
|
|
|
+ helper('setText'),
|
|
|
+ `${generated ? 'x' : 'n'}${element}`,
|
|
|
+ texts,
|
|
|
+ ),
|
|
|
+ ]
|
|
|
}
|
|
|
|
|
|
function combineValues(
|
|
|
@@ -40,6 +60,14 @@ export function genGetTextChild(
|
|
|
oper: GetTextChildIRNode,
|
|
|
context: CodegenContext,
|
|
|
): CodeFragment[] {
|
|
|
+ const {
|
|
|
+ block: { dynamicComponents },
|
|
|
+ } = context
|
|
|
+
|
|
|
+ // if the parent is a dynamic component, don't need to generate a child
|
|
|
+ // because it will use the `setElementText` helper directly.
|
|
|
+ if (dynamicComponents.includes(oper.parent)) return []
|
|
|
+
|
|
|
return [
|
|
|
NEWLINE,
|
|
|
`const x${oper.parent} = ${context.helper('child')}(n${oper.parent})`,
|