@@ -16,6 +16,7 @@ import {
16
16
render ,
17
17
serialize ,
18
18
serializeInner ,
19
+ useModel ,
19
20
withDirectives ,
20
21
} from '@vue/runtime-test'
21
22
import {
@@ -144,6 +145,62 @@ describe('renderer: teleport', () => {
144
145
`"<!--teleport start--><!--teleport end--><div>Footer</div><div id="targetId"><div>bar</div></div>"` ,
145
146
)
146
147
} )
148
+
149
+ // #13349
150
+ test ( 'handle deferred teleport updates before and after mount' , async ( ) => {
151
+ const root = document . createElement ( 'div' )
152
+ document . body . appendChild ( root )
153
+
154
+ const show = ref ( false )
155
+ const data2 = ref ( '2' )
156
+ const data3 = ref ( '3' )
157
+
158
+ const Comp = {
159
+ props : {
160
+ modelValue : { } ,
161
+ modelModifiers : { } ,
162
+ } ,
163
+ emits : [ 'update:modelValue' ] ,
164
+ setup ( props : any ) {
165
+ const data2 = useModel ( props , 'modelValue' )
166
+ data2 . value = '2+'
167
+ return ( ) => h ( 'span' )
168
+ } ,
169
+ }
170
+
171
+ createDOMApp ( {
172
+ setup ( ) {
173
+ setTimeout ( ( ) => ( show . value = true ) , 5 )
174
+ setTimeout ( ( ) => ( data3 . value = '3+' ) , 10 )
175
+ } ,
176
+ render ( ) {
177
+ return h ( Fragment , null , [
178
+ h ( 'span' , { id : 'targetId001' } ) ,
179
+ show . value
180
+ ? h ( Fragment , null , [
181
+ h ( Teleport , { to : '#targetId001' , defer : true } , [
182
+ createTextVNode ( String ( data3 . value ) ) ,
183
+ ] ) ,
184
+ h ( Comp , {
185
+ modelValue : data2 . value ,
186
+ 'onUpdate:modelValue' : ( event : any ) =>
187
+ ( data2 . value = event ) ,
188
+ } ) ,
189
+ ] )
190
+ : createCommentVNode ( 'v-if' ) ,
191
+ ] )
192
+ } ,
193
+ } ) . mount ( root )
194
+
195
+ expect ( root . innerHTML ) . toMatchInlineSnapshot (
196
+ `"<span id="targetId001"></span><!--v-if-->"` ,
197
+ )
198
+
199
+ await new Promise ( r => setTimeout ( r , 10 ) )
200
+ expect ( root . innerHTML ) . toMatchInlineSnapshot (
201
+ `"<span id="targetId001">3+</span><!--teleport start--><!--teleport end--><span></span>"` ,
202
+ )
203
+ } )
147
204
} )
148
205
149
206
function runSharedTests ( deferMode : boolean ) {
0 commit comments