From 9916cab3f731625d861233b4e5cef9ef77ccbf22 Mon Sep 17 00:00:00 2001 From: * <8> Date: Wed, 7 Sep 2022 21:09:50 +0800 Subject: [PATCH 1/2] Match-id-7bdd5aa7851d0fb3ba0271c01879051dea1ccf20 --- libs/horizon/src/renderer/TreeBuilder.ts | 7 ++++++- libs/horizon/src/renderer/vnode/VNode.ts | 2 ++ libs/horizon/src/renderer/vnode/VNodeUtils.ts | 1 + 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/libs/horizon/src/renderer/TreeBuilder.ts b/libs/horizon/src/renderer/TreeBuilder.ts index 7bc0eece..2622bc4a 100644 --- a/libs/horizon/src/renderer/TreeBuilder.ts +++ b/libs/horizon/src/renderer/TreeBuilder.ts @@ -176,7 +176,12 @@ export function calcStartUpdateVNode(treeRoot: VNode) { } if (toUpdateNodes.length === 1) { - return toUpdateNodes[0]; + const toUpdateNode = toUpdateNodes[0]; + if (toUpdateNode.isCleared) { + return treeRoot; + } else { + return toUpdateNodes[0]; + } } // 要计算的节点过多,直接返回根节点 diff --git a/libs/horizon/src/renderer/vnode/VNode.ts b/libs/horizon/src/renderer/vnode/VNode.ts index 18b4d528..752c99cc 100644 --- a/libs/horizon/src/renderer/vnode/VNode.ts +++ b/libs/horizon/src/renderer/vnode/VNode.ts @@ -39,6 +39,8 @@ export class VNode { ref: RefType | ((handle: any) => void) | null = null; // 包裹一个函数,submit阶段使用,比如将外部useRef生成的对象赋值到ref上 oldProps: any = null; + // 是否已经被从树上移除 + isCleared = false; changeList: any; // DOM的变更列表 effectList: any[] | null; // useEffect 的更新数组 updates: any[] | null; // TreeRoot和ClassComponent使用的更新数组 diff --git a/libs/horizon/src/renderer/vnode/VNodeUtils.ts b/libs/horizon/src/renderer/vnode/VNodeUtils.ts index f3092976..789b8d2e 100644 --- a/libs/horizon/src/renderer/vnode/VNodeUtils.ts +++ b/libs/horizon/src/renderer/vnode/VNodeUtils.ts @@ -73,6 +73,7 @@ export function travelVNodeTree( // 置空vNode export function clearVNode(vNode: VNode) { + vNode.isCleared = true; vNode.child = null; vNode.next = null; vNode.depContexts = null; From c5549be36f9f581bb5182ef86bb3839681e50e5a Mon Sep 17 00:00:00 2001 From: * <8> Date: Wed, 7 Sep 2022 21:39:00 +0800 Subject: [PATCH 2/2] Match-id-70d0aa42ebbc46bbc13f8c9c15f5fb16eba14cbe --- CHANGELOG.md | 3 +++ libs/horizon/package.json | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fe7fbdd9..5296cbeb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +## 0.0.17 (2022-09-07) +- **core**: fix 不在树上的节点发起更新导致错误 + ## 0.0.16 (2022-09-07) - **core**: #56,#65 diff null 不能正确卸载组件 diff --git a/libs/horizon/package.json b/libs/horizon/package.json index b9b420bc..2bc5ecf0 100644 --- a/libs/horizon/package.json +++ b/libs/horizon/package.json @@ -4,7 +4,7 @@ "keywords": [ "horizon" ], - "version": "0.0.16", + "version": "0.0.17", "homepage": "", "bugs": "", "main": "index.js",