diff --git a/packages/runtime-vapor/src/vdomInterop.ts b/packages/runtime-vapor/src/vdomInterop.ts index 39a9e07f7..04a288118 100644 --- a/packages/runtime-vapor/src/vdomInterop.ts +++ b/packages/runtime-vapor/src/vdomInterop.ts @@ -74,9 +74,8 @@ const vaporInteropImpl: Omit< 'vdomMount' | 'vdomUnmount' | 'vdomSlot' > = { mount(vnode, container, anchor, parentComponent) { - let selfAnchor: Node | null = null + let selfAnchor = (vnode.el = vnode.anchor = createTextNode()) if (!isHydrating) { - selfAnchor = vnode.el = vnode.anchor = createTextNode() container.insertBefore(selfAnchor, anchor) } const prev = currentInstance @@ -120,6 +119,12 @@ const vaporInteropImpl: Omit< vnode.transition as VaporTransitionHooks, ) } + if (isHydrating) { + // insert self anchor after hydration completed to avoid mismatching + ;(instance.m || (instance.m = [])).push(() => { + container.insertBefore(selfAnchor, anchor) + }) + } mountComponent(instance, container, selfAnchor) simpleSetCurrentInstance(prev) return instance @@ -142,7 +147,7 @@ const vaporInteropImpl: Omit< } else if (vnode.vb) { remove(vnode.vb, container) } - if (vnode.anchor) remove(vnode.anchor as Node, container) + remove(vnode.anchor as Node, container) }, /**