From 806779178299a161ca650b82242c44ca352c2c5d Mon Sep 17 00:00:00 2001 From: daiwei Date: Thu, 14 Aug 2025 14:24:43 +0800 Subject: [PATCH] chore: improve vdom slot hydration handling --- packages/runtime-vapor/src/vdomInterop.ts | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/packages/runtime-vapor/src/vdomInterop.ts b/packages/runtime-vapor/src/vdomInterop.ts index 74982b4d57..fe12fddbfd 100644 --- a/packages/runtime-vapor/src/vdomInterop.ts +++ b/packages/runtime-vapor/src/vdomInterop.ts @@ -388,7 +388,12 @@ function renderVDOMSlot( } if (isValidSlot) { if (isHydrating) { - hydrateVNode(vnode!, parentComponent as any) + // if slot content is a vnode, hydrate it + // otherwise, it is a vapor Block that is already hydrated during + // renderSlot + if (isVNode(vnode)) { + hydrateVNode(vnode!, parentComponent as any) + } } else { if (fallbackNodes) { remove(fallbackNodes, parentNode) @@ -416,7 +421,9 @@ function renderVDOMSlot( fallbackNodes = fallback(internals, parentComponent) if (isHydrating) { // hydrate fallback - hydrateVNode(fallbackNodes as any, parentComponent as any) + if (isVNode(vnode)) { + hydrateVNode(fallbackNodes as any, parentComponent as any) + } } else { // mount fallback if (oldVNode) { @@ -516,5 +523,6 @@ function hydrateVNode( null, false, ) - if (nextNode) advanceHydrationNode(nextNode) + if (nextNode) setCurrentHydrationNode(nextNode) + else advanceHydrationNode(node) } -- 2.47.3