@@ -152,16 +152,7 @@ export function createHydrationFunctions(
152
152
. firstChild !
153
153
154
154
// replace <template> node with inner child
155
- replace ( content , node )
156
- let parent = parentComponent
157
- while ( parent ) {
158
- if ( parent . vnode . el === node ) {
159
- parent . vnode . el = content
160
- parent . subTree . el = content
161
- }
162
- parent = parent . parent
163
- }
164
- node = content
155
+ node = replaceNode ( content , node , parentComponent )
165
156
nextNode = nextSibling ( node )
166
157
} else {
167
158
nextNode = onMismatch ( )
@@ -406,16 +397,7 @@ export function createHydrationFunctions(
406
397
dirs && invokeDirectiveHook ( vnode , null , parentComponent , 'beforeMount' )
407
398
408
399
// replace <template> node with inner child
409
- replace ( content , el )
410
- let parent = parentComponent
411
- while ( parent ) {
412
- if ( parent . vnode . el === el ) {
413
- parent . vnode . el = content
414
- parent . subTree . el = content
415
- }
416
- parent = parent . parent
417
- }
418
- el = content
400
+ el = replaceNode ( content , el , parentComponent ) as Element
419
401
} else if ( dirs ) {
420
402
invokeDirectiveHook ( vnode , null , parentComponent , 'beforeMount' )
421
403
}
@@ -640,5 +622,27 @@ export function createHydrationFunctions(
640
622
return node
641
623
}
642
624
625
+ const replaceNode = (
626
+ newNode : Node ,
627
+ oldNode : Node ,
628
+ parentComponent : ComponentInternalInstance | null
629
+ ) : Node => {
630
+ // replace node
631
+ replace ( newNode , oldNode )
632
+
633
+ // update vnode
634
+ let parent = parentComponent
635
+ while ( parent ) {
636
+ if ( parent . vnode . el === oldNode ) {
637
+ parent . vnode . el = newNode
638
+ parent . subTree . el = newNode
639
+ }
640
+ parent = parent . parent
641
+ }
642
+
643
+ oldNode = newNode
644
+ return oldNode
645
+ }
646
+
643
647
return [ hydrate , hydrateNode ] as const
644
648
}
0 commit comments