@@ -9,13 +9,33 @@ export function genSetText(
9
9
oper : SetTextIRNode ,
10
10
context : CodegenContext ,
11
11
) : CodeFragment [ ] {
12
- const { helper } = context
12
+ const {
13
+ helper,
14
+ block : { dynamicComponents } ,
15
+ } = context
13
16
const { element, values, generated, jsx } = oper
14
17
const texts = combineValues ( values , context , jsx )
15
- return [
16
- NEWLINE ,
17
- ...genCall ( helper ( 'setText' ) , `${ generated ? 'x' : 'n' } ${ element } ` , texts ) ,
18
- ]
18
+
19
+ // if the element is a dynamic component, we need to use `setElementText`
20
+ // to set the textContent of the VaporFragment's nodes.
21
+ return dynamicComponents . includes ( oper . element )
22
+ ? [
23
+ NEWLINE ,
24
+ ...genCall (
25
+ helper ( 'setElementText' ) ,
26
+ `n${ element } .nodes` ,
27
+ texts ,
28
+ 'true' , // isConverted
29
+ ) ,
30
+ ]
31
+ : [
32
+ NEWLINE ,
33
+ ...genCall (
34
+ helper ( 'setText' ) ,
35
+ `${ generated ? 'x' : 'n' } ${ element } ` ,
36
+ texts ,
37
+ ) ,
38
+ ]
19
39
}
20
40
21
41
function combineValues (
@@ -40,6 +60,14 @@ export function genGetTextChild(
40
60
oper : GetTextChildIRNode ,
41
61
context : CodegenContext ,
42
62
) : CodeFragment [ ] {
63
+ const {
64
+ block : { dynamicComponents } ,
65
+ } = context
66
+
67
+ // if the parent is a dynamic component, don't need to generate a child
68
+ // because it will use the `setElementText` helper directly.
69
+ if ( dynamicComponents . includes ( oper . parent ) ) return [ ]
70
+
43
71
return [
44
72
NEWLINE ,
45
73
`const x${ oper . parent } = ${ context . helper ( 'child' ) } (n${ oper . parent } )` ,
0 commit comments