From aa1944e8d45bbf13bdc614d079e96ffa461d4594 Mon Sep 17 00:00:00 2001 From: * <8> Date: Fri, 28 Jan 2022 10:19:57 +0800 Subject: [PATCH 1/2] Match-id-79434802c4c9b64f0a228c6c1b1793fea390b22e --- libs/horizon/src/renderer/submit/LifeCycleHandler.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/libs/horizon/src/renderer/submit/LifeCycleHandler.ts b/libs/horizon/src/renderer/submit/LifeCycleHandler.ts index ecaa6298..0ca8b0a8 100644 --- a/libs/horizon/src/renderer/submit/LifeCycleHandler.ts +++ b/libs/horizon/src/renderer/submit/LifeCycleHandler.ts @@ -336,7 +336,12 @@ function submitClear(vNode: VNode): void { // 在所有子项都卸载后,删除dom树中的节点 removeChildDom(currentParent, vNode.realNode); - currentParent.append(cloneDom); + const realNodeNext = getSiblingDom(vNode); + if (realNodeNext) { + insertDomBefore(currentParent, cloneDom, realNodeNext); + } else { + appendChildElement(currentParent, cloneDom); + } vNode.realNode = cloneDom; attachRef(vNode); FlagUtils.removeFlag(vNode, Clear); From 75289ee0853555b8f5267b14a19c7ecc52400d74 Mon Sep 17 00:00:00 2001 From: * <8> Date: Fri, 28 Jan 2022 10:54:06 +0800 Subject: [PATCH 2/2] Match-id-3af6008f5308a6c047b9f9a878e9990b606326bd --- .../src/renderer/submit/LifeCycleHandler.ts | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/libs/horizon/src/renderer/submit/LifeCycleHandler.ts b/libs/horizon/src/renderer/submit/LifeCycleHandler.ts index 0ca8b0a8..41c16cb6 100644 --- a/libs/horizon/src/renderer/submit/LifeCycleHandler.ts +++ b/libs/horizon/src/renderer/submit/LifeCycleHandler.ts @@ -252,11 +252,7 @@ function insertOrAppendPlacementNode( const { tag, realNode } = node; if (isDomVNode(node)) { - if (beforeDom) { - insertDomBefore(parent, realNode, beforeDom); - } else { - appendChildElement(parent, realNode); - } + insertDom(parent, realNode, beforeDom); } else if (tag === DomPortal) { // 这里不做处理,直接在portal中处理 } else { @@ -269,6 +265,14 @@ function insertOrAppendPlacementNode( } } +function insertDom(parent, realNode, beforeDom) { + if (beforeDom) { + insertDomBefore(parent, realNode, beforeDom); + } else { + appendChildElement(parent, realNode); + } +} + // 遍历所有子节点:删除dom节点,detach ref 和 调用componentWillUnmount() function unmountDomComponents(vNode: VNode): void { let currentParentIsValid = false; @@ -337,11 +341,7 @@ function submitClear(vNode: VNode): void { // 在所有子项都卸载后,删除dom树中的节点 removeChildDom(currentParent, vNode.realNode); const realNodeNext = getSiblingDom(vNode); - if (realNodeNext) { - insertDomBefore(currentParent, cloneDom, realNodeNext); - } else { - appendChildElement(currentParent, cloneDom); - } + insertDom(currentParent, cloneDom, realNodeNext); vNode.realNode = cloneDom; attachRef(vNode); FlagUtils.removeFlag(vNode, Clear);