Match-id-5684643f375c3d5f9612e974f8374ae4a3548172
This commit is contained in:
parent
356874599a
commit
a68c3b9897
|
@ -323,7 +323,7 @@ function diffArrayNodes(
|
||||||
if (firstChild && parentNode.tag === DomComponent && newChildren.length === 0) {
|
if (firstChild && parentNode.tag === DomComponent && newChildren.length === 0) {
|
||||||
// if (false) {
|
// if (false) {
|
||||||
FlagUtils.markClear(parentNode);
|
FlagUtils.markClear(parentNode);
|
||||||
parentNode.ClearChild = firstChild;
|
parentNode.clearChild = firstChild;
|
||||||
} else {
|
} else {
|
||||||
deleteVNodes(parentNode, oldNode, rightEndOldNode);
|
deleteVNodes(parentNode, oldNode, rightEndOldNode);
|
||||||
}
|
}
|
||||||
|
|
|
@ -313,48 +313,20 @@ function submitClear(vNode: VNode): void {
|
||||||
const cloneDom = realNode.cloneNode(false); // 复制节点后horizon的两个属性消失
|
const cloneDom = realNode.cloneNode(false); // 复制节点后horizon的两个属性消失
|
||||||
cloneDom[internalKeys.VNode] = realNode[internalKeys.VNode];
|
cloneDom[internalKeys.VNode] = realNode[internalKeys.VNode];
|
||||||
cloneDom[internalKeys.props] = realNode[internalKeys.props];
|
cloneDom[internalKeys.props] = realNode[internalKeys.props];
|
||||||
// 删除节点
|
|
||||||
let currentParentIsValid = false;
|
|
||||||
|
|
||||||
// 这两个变量要一起更新
|
const parentObj = findDomParent(vNode);
|
||||||
let currentParent;
|
const currentParent = parentObj.parentDom;
|
||||||
|
const clearChild = vNode.clearChild as VNode;
|
||||||
travelVNodeTree(vNode, (node) => {
|
|
||||||
if (!currentParentIsValid) {
|
|
||||||
const parentObj = findDomParent(node);
|
|
||||||
currentParent = parentObj.parentDom;
|
|
||||||
currentParentIsValid = true;
|
|
||||||
}
|
|
||||||
const tag = node.tag;
|
|
||||||
if (tag === DomComponent || tag === DomText) {
|
|
||||||
// 卸载子vNode,递归遍历子vNode
|
// 卸载子vNode,递归遍历子vNode
|
||||||
unmountNestedVNodes(node.ClearChild); // node.child 为空,需要添加原有的child
|
unmountNestedVNodes(clearChild); // node.child 为空,需要添加原有的child
|
||||||
|
|
||||||
// 在所有子项都卸载后,删除dom树中的节点
|
// 在所有子项都卸载后,删除dom树中的节点
|
||||||
removeChildDom(currentParent, node.realNode);
|
removeChildDom(currentParent, vNode.realNode);
|
||||||
console.log(currentParent);
|
clearVNode(clearChild);
|
||||||
currentParent.append(cloneDom);
|
currentParent.append(cloneDom);
|
||||||
vNode.realNode = cloneDom;
|
vNode.realNode = cloneDom;
|
||||||
FlagUtils.removeFlag(vNode, Clear);
|
FlagUtils.removeFlag(vNode, Clear);
|
||||||
vNode.ClearChild = null;
|
vNode.clearChild = null;
|
||||||
} else if (tag === DomPortal) {
|
|
||||||
console.log(DomPortal);
|
|
||||||
if (node.child !== null) {
|
|
||||||
currentParent = node.outerDom;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
unmountVNode(node);
|
|
||||||
}
|
|
||||||
}, (node) => {
|
|
||||||
// 如果是dom不用再遍历child
|
|
||||||
const tag = node.tag;
|
|
||||||
return tag === DomComponent || tag === DomText;
|
|
||||||
}, null, (node) => {
|
|
||||||
if (node.tag === DomPortal) {
|
|
||||||
// 当离开portal,需要重新设置parent
|
|
||||||
currentParentIsValid = false;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function submitDeletion(vNode: VNode): void {
|
function submitDeletion(vNode: VNode): void {
|
||||||
|
|
|
@ -62,7 +62,7 @@ export class VNode {
|
||||||
ForceUpdate?: boolean;
|
ForceUpdate?: boolean;
|
||||||
Clear?: boolean;
|
Clear?: boolean;
|
||||||
} = {};
|
} = {};
|
||||||
ClearChild: VNode|null = null;
|
clearChild: VNode|null = null;
|
||||||
// one tree相关属性
|
// one tree相关属性
|
||||||
isCreated: boolean = true;
|
isCreated: boolean = true;
|
||||||
oldHooks: Array<Hook<any, any>> = []; // 保存上一次执行的hook
|
oldHooks: Array<Hook<any, any>> = []; // 保存上一次执行的hook
|
||||||
|
|
Loading…
Reference in New Issue