File tree 2 files changed +33
-3
lines changed
2 files changed +33
-3
lines changed Original file line number Diff line number Diff line change @@ -179,6 +179,36 @@ describe('renderer: teleport', () => {
179
179
)
180
180
} )
181
181
182
+ test ( 'should work when using template ref as target' , async ( ) => {
183
+ const root = nodeOps . createElement ( 'div' )
184
+ const target = ref ( null )
185
+ const disabled = ref ( true )
186
+
187
+ const App = {
188
+ setup ( ) {
189
+ return ( ) =>
190
+ h ( Fragment , [
191
+ h ( 'div' , { ref : target } ) ,
192
+ h (
193
+ Teleport ,
194
+ { to : target . value , disabled : disabled . value } ,
195
+ h ( 'div' , 'teleported' )
196
+ )
197
+ ] )
198
+ }
199
+ }
200
+ render ( h ( App ) , root )
201
+ expect ( serializeInner ( root ) ) . toMatchInlineSnapshot (
202
+ `"<div></div><!--teleport start--><div>teleported</div><!--teleport end-->"`
203
+ )
204
+
205
+ disabled . value = false
206
+ await nextTick ( )
207
+ expect ( serializeInner ( root ) ) . toMatchInlineSnapshot (
208
+ `"<div><div>teleported</div></div><!--teleport start--><!--teleport end-->"`
209
+ )
210
+ } )
211
+
182
212
test ( 'disabled' , ( ) => {
183
213
const target = nodeOps . createElement ( 'div' )
184
214
const root = nodeOps . createElement ( 'div' )
Original file line number Diff line number Diff line change @@ -14,7 +14,7 @@ import { warn } from '../warning'
14
14
export type TeleportVNode = VNode < RendererNode , RendererElement , TeleportProps >
15
15
16
16
export interface TeleportProps {
17
- to : string | RendererElement
17
+ to : string | RendererElement | null | undefined
18
18
disabled ?: boolean
19
19
}
20
20
@@ -50,7 +50,7 @@ const resolveTarget = <T = RendererElement>(
50
50
return target as any
51
51
}
52
52
} else {
53
- if ( __DEV__ && ! targetSelector ) {
53
+ if ( __DEV__ && ! targetSelector && ! isTeleportDisabled ( props ) ) {
54
54
warn ( `Invalid Teleport target: ${ targetSelector } ` )
55
55
}
56
56
return targetSelector as any
@@ -94,7 +94,7 @@ export const TeleportImpl = {
94
94
const targetAnchor = ( n2 . targetAnchor = createText ( '' ) )
95
95
if ( target ) {
96
96
insert ( targetAnchor , target )
97
- } else if ( __DEV__ ) {
97
+ } else if ( __DEV__ && ! disabled ) {
98
98
warn ( 'Invalid Teleport target on mount:' , target , `(${ typeof target } )` )
99
99
}
100
100
You can’t perform that action at this time.
0 commit comments