Match-id-2a4d49b90b105db41f89732a409a878541bd1263

This commit is contained in:
* 2022-02-17 11:34:11 +08:00 committed by *
parent b27cb830dc
commit 3410a9cc00
3 changed files with 9 additions and 7 deletions

View File

@ -4,17 +4,19 @@ import {throwNotInFuncError} from '../../hooks/BaseHook';
// 重置依赖
export function resetDepContexts(vNode: VNode): void {
vNode.depContexts = [];
vNode.depContexts = null;
}
// 收集依赖
function collectDeps<T>(vNode: VNode, context: ContextType<T>) {
const depContexts = vNode.depContexts;
if (!depContexts.length) {
if (depContexts === null) {
vNode.depContexts = [context];
} else {
vNode.isDepContextChange = false;
}
if (!depContexts.includes(context)) {
depContexts.push(context);
if (!depContexts.includes(context)) {
depContexts.push(context);
}
}
}

View File

@ -50,7 +50,7 @@ function handleContextChange(processing: VNode, context: ContextType<any>): void
// 从vNode开始遍历
travelVNodeTree(vNode, node => {
const depContexts = node.depContexts;
if (depContexts.length) {
if (depContexts && depContexts.length) {
isMatch = matchDependencies(depContexts, context, node) ?? isMatch;
}
}, node =>

View File

@ -33,7 +33,7 @@ export class VNode {
state: any = null; // ClassComponent和TreeRoot的状态
hooks: Array<Hook<any, any>> | null = null; // 保存hook
suspenseChildStatus: string = ''; // Suspense的Children是否显示
depContexts: Array<ContextType<any>> | null = []; // FunctionComponent和ClassComponent对context的依赖列表
depContexts: Array<ContextType<any>> | null = null; // FunctionComponent和ClassComponent对context的依赖列表
isDepContextChange: boolean = false; // context是否变更
dirtyNodes: Array<VNode> | null = null; // 需要改动的节点数组
shouldUpdate: boolean = false;