Просмотр исходного кода

chore: Merge branch 'edison/fix/resetInsertion' into edison/testVapor

daiwei 1 год назад
Родитель
Сommit
829c8164ca

+ 6 - 2
packages/runtime-vapor/src/apiCreateIf.ts

@@ -1,6 +1,6 @@
 import { IF_ANCHOR_LABEL } from '@vue/shared'
 import { type Block, type BlockFn, DynamicFragment, insert } from './block'
-import { isHydrating } from './dom/hydration'
+import { isHydrating, locateHydrationNode } from './dom/hydration'
 import {
   insertionAnchor,
   insertionParent,
@@ -16,7 +16,11 @@ export function createIf(
 ): Block {
   const _insertionParent = insertionParent
   const _insertionAnchor = insertionAnchor
-  if (!isHydrating) resetInsertionState()
+  if (isHydrating) {
+    locateHydrationNode(true)
+  } else {
+    resetInsertionState()
+  }
 
   let frag: Block
   if (once) {

+ 1 - 1
packages/runtime-vapor/src/block.ts

@@ -218,7 +218,7 @@ export function insert(
   } else {
     // fragment
     if (block.insert) {
-      block.insert(parent, anchor)
+      block.insert(parent, anchor, (block as TransitionBlock).$transition)
     } else {
       insert(block.nodes, parent, anchor, parentSuspense)
     }

+ 6 - 2
packages/runtime-vapor/src/componentSlots.ts

@@ -23,7 +23,7 @@ import {
   insertionParent,
   resetInsertionState,
 } from './insertionState'
-import { isHydrating } from './dom/hydration'
+import { isHydrating, locateHydrationNode } from './dom/hydration'
 
 export type RawSlots = Record<string, VaporSlot> & {
   $?: DynamicSlotSource[]
@@ -123,7 +123,11 @@ export function createSlot(
 ): Block {
   const _insertionParent = insertionParent
   const _insertionAnchor = insertionAnchor
-  if (!isHydrating) resetInsertionState()
+  if (isHydrating) {
+    locateHydrationNode(true)
+  } else {
+    resetInsertionState()
+  }
 
   const instance = i || (currentInstance as VaporComponentInstance)
   const rawSlots = instance.rawSlots

+ 5 - 4
packages/runtime-vapor/src/vdomInterop.ts

@@ -254,10 +254,12 @@ function createVDOMComponent(
 
   vnode.scopeId = parentInstance.type.__scopeId!
 
-  frag.insert = (parentNode, anchor) => {
+  frag.insert = (parentNode, anchor, transition) => {
     const prev = currentInstance
     simpleSetCurrentInstance(parentInstance)
     if (!isMounted || isHydrating) {
+      if (transition) setVNodeTransitionHooks(vnode, transition)
+
       if (isHydrating) {
         ;(
           vdomHydrateNode ||
@@ -294,10 +296,9 @@ function createVDOMComponent(
       )
     }
 
-    simpleSetCurrentInstance(prev)
-
     // update the fragment nodes
-    frag.nodes = vnode.el as Block
+    frag.nodes = [vnode.el as Node]
+    simpleSetCurrentInstance(prev)
   }
 
   frag.remove = unmount