Skip to content

Commit 034d1fc

Browse files
committed
test: add test
1 parent 109d1d8 commit 034d1fc

File tree

2 files changed

+58
-2
lines changed

2 files changed

+58
-2
lines changed

packages/runtime-core/__tests__/components/Teleport.spec.ts

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import {
1616
render,
1717
serialize,
1818
serializeInner,
19+
useModel,
1920
withDirectives,
2021
} from '@vue/runtime-test'
2122
import {
@@ -144,6 +145,62 @@ describe('renderer: teleport', () => {
144145
`"<!--teleport start--><!--teleport end--><div>Footer</div><div id="targetId"><div>bar</div></div>"`,
145146
)
146147
})
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+
})
147204
})
148205

149206
function runSharedTests(deferMode: boolean) {

packages/runtime-core/src/components/Teleport.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ export const TeleportImpl = {
167167
n2.el!.__isMounted = false
168168
queuePostRenderEffect(() => {
169169
mountToTarget()
170-
n2.el!.__isMounted = true
170+
delete n2.el!.__isMounted
171171
}, parentSuspense)
172172
} else {
173173
mountToTarget()
@@ -187,7 +187,6 @@ export const TeleportImpl = {
187187
optimized,
188188
internals,
189189
)
190-
delete n1.el!.__isMounted
191190
}, parentSuspense)
192191
return
193192
}

0 commit comments

Comments
 (0)