Match-id-008af88bfa5eb7487150476ddae80d57f9c57b0a
This commit is contained in:
parent
3f08ed229f
commit
9a1b0add4b
|
@ -71,7 +71,7 @@ export function handleRenderThrowError(
|
||||||
// vNode抛出了异常,标记Interrupted中断
|
// vNode抛出了异常,标记Interrupted中断
|
||||||
FlagUtils.markInterrupted(sourceVNode);
|
FlagUtils.markInterrupted(sourceVNode);
|
||||||
// dirtyNodes 不再有效
|
// dirtyNodes 不再有效
|
||||||
sourceVNode.dirtyNodes = [];
|
sourceVNode.dirtyNodes = null;
|
||||||
|
|
||||||
// error是个promise
|
// error是个promise
|
||||||
if (error !== null && typeof error === 'object' && typeof error.then === 'function') {
|
if (error !== null && typeof error === 'object' && typeof error.then === 'function') {
|
||||||
|
|
|
@ -57,10 +57,20 @@ function resetProcessingVariables(startUpdateVNode: VNode) {
|
||||||
// 收集有变化的节点,在submit阶段继续处理
|
// 收集有变化的节点,在submit阶段继续处理
|
||||||
function collectDirtyNodes(vNode: VNode, parent: VNode): void {
|
function collectDirtyNodes(vNode: VNode, parent: VNode): void {
|
||||||
// 将子树和此vNode的所有效果附加到父树的效果列表中,子项的完成顺序会影响副作用顺序。
|
// 将子树和此vNode的所有效果附加到父树的效果列表中,子项的完成顺序会影响副作用顺序。
|
||||||
parent.dirtyNodes.push(...vNode.dirtyNodes);
|
if (vNode.dirtyNodes !== null && vNode.dirtyNodes.length) {
|
||||||
|
if (parent.dirtyNodes === null) {
|
||||||
|
parent.dirtyNodes = [...vNode.dirtyNodes];
|
||||||
|
} else {
|
||||||
|
parent.dirtyNodes.push(...vNode.dirtyNodes);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (FlagUtils.hasAnyFlag(vNode)) {
|
if (FlagUtils.hasAnyFlag(vNode)) {
|
||||||
parent.dirtyNodes.push(vNode);
|
if (parent.dirtyNodes === null) {
|
||||||
|
parent.dirtyNodes = [vNode];
|
||||||
|
} else {
|
||||||
|
parent.dirtyNodes.push(vNode);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,10 @@ function isNoKeyFragment(child: any) {
|
||||||
// 清除单个节点
|
// 清除单个节点
|
||||||
function deleteVNode(parentNode: VNode, delVNode: VNode): void {
|
function deleteVNode(parentNode: VNode, delVNode: VNode): void {
|
||||||
FlagUtils.setDeletion(delVNode);
|
FlagUtils.setDeletion(delVNode);
|
||||||
|
if (parentNode.dirtyNodes === null) {
|
||||||
|
parentNode.dirtyNodes = [delVNode];
|
||||||
|
return;
|
||||||
|
}
|
||||||
parentNode.dirtyNodes.push(delVNode);
|
parentNode.dirtyNodes.push(delVNode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -40,11 +40,15 @@ export function submitToRender(treeRoot) {
|
||||||
|
|
||||||
if (FlagUtils.hasAnyFlag(startVNode)) {
|
if (FlagUtils.hasAnyFlag(startVNode)) {
|
||||||
// 把自己加上
|
// 把自己加上
|
||||||
startVNode.dirtyNodes.push(startVNode);
|
if (startVNode.dirtyNodes === null) {
|
||||||
|
startVNode.dirtyNodes = [startVNode];
|
||||||
|
} else {
|
||||||
|
startVNode.dirtyNodes.push(startVNode);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const dirtyNodes = startVNode.dirtyNodes;
|
const dirtyNodes = startVNode.dirtyNodes;
|
||||||
if (dirtyNodes.length) {
|
if (dirtyNodes !== null && dirtyNodes.length) {
|
||||||
const preMode = copyExecuteMode();
|
const preMode = copyExecuteMode();
|
||||||
changeMode(InRender, true);
|
changeMode(InRender, true);
|
||||||
|
|
||||||
|
@ -60,7 +64,7 @@ export function submitToRender(treeRoot) {
|
||||||
// after submit阶段
|
// after submit阶段
|
||||||
afterSubmit(dirtyNodes);
|
afterSubmit(dirtyNodes);
|
||||||
|
|
||||||
setExecuteMode(preMode)
|
setExecuteMode(preMode);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isSchedulingEffects()) {
|
if (isSchedulingEffects()) {
|
||||||
|
|
|
@ -35,7 +35,7 @@ export class VNode {
|
||||||
suspenseChildStatus: string = ''; // Suspense的Children是否显示
|
suspenseChildStatus: string = ''; // Suspense的Children是否显示
|
||||||
depContexts: Array<ContextType<any>> | null = []; // FunctionComponent和ClassComponent对context的依赖列表
|
depContexts: Array<ContextType<any>> | null = []; // FunctionComponent和ClassComponent对context的依赖列表
|
||||||
isDepContextChange: boolean = false; // context是否变更
|
isDepContextChange: boolean = false; // context是否变更
|
||||||
dirtyNodes: Array<VNode> | null = []; // 需要改动的节点数组
|
dirtyNodes: Array<VNode> | null = null; // 需要改动的节点数组
|
||||||
shouldUpdate: boolean = false;
|
shouldUpdate: boolean = false;
|
||||||
childShouldUpdate: boolean = false;
|
childShouldUpdate: boolean = false;
|
||||||
outerDom: any;
|
outerDom: any;
|
||||||
|
|
|
@ -78,7 +78,7 @@ export function updateVNode(vNode: VNode, vNodeProps?: any): VNode {
|
||||||
vNode.oldRef = vNode.ref;
|
vNode.oldRef = vNode.ref;
|
||||||
|
|
||||||
FlagUtils.setNoFlags(vNode);
|
FlagUtils.setNoFlags(vNode);
|
||||||
vNode.dirtyNodes = [];
|
vNode.dirtyNodes = null;
|
||||||
vNode.isCreated = false;
|
vNode.isCreated = false;
|
||||||
|
|
||||||
return vNode;
|
return vNode;
|
||||||
|
|
Loading…
Reference in New Issue