Match-id-5694310a3f51322edad299f66fcfa5c6ac083f95

This commit is contained in:
* 2022-01-30 18:04:06 +08:00 committed by *
commit 483d5f38e5
2 changed files with 11 additions and 36 deletions

View File

@ -7,9 +7,6 @@ import type {
Effect as HookEffect, Effect as HookEffect,
EffectList, EffectList,
} from '../hooks/HookType'; } from '../hooks/HookType';
import {
callRenderQueueImmediate,
} from '../taskExecutor/RenderQueue';
import {runAsync} from '../taskExecutor/TaskExecutor'; import {runAsync} from '../taskExecutor/TaskExecutor';
import { import {
copyExecuteMode, InRender, setExecuteMode,changeMode copyExecuteMode, InRender, setExecuteMode,changeMode
@ -20,7 +17,6 @@ let hookEffects: Array<HookEffect | VNode> = [];
let hookRemoveEffects: Array<HookEffect | VNode> = []; let hookRemoveEffects: Array<HookEffect | VNode> = [];
// 是否正在异步调度effects // 是否正在异步调度effects
let isScheduling: boolean = false; let isScheduling: boolean = false;
let hookEffectRoot: VNode | null = null;
export function setSchedulingEffects(value) { export function setSchedulingEffects(value) {
isScheduling = value; isScheduling = value;
@ -29,13 +25,6 @@ export function isSchedulingEffects() {
return isScheduling; return isScheduling;
} }
export function setHookEffectRoot(root: VNode | null) {
hookEffectRoot = root;
}
export function getHookEffectRoot() {
return hookEffectRoot;
}
export function callUseEffects(vNode: VNode) { export function callUseEffects(vNode: VNode) {
const effectList: EffectList = vNode.effectList; const effectList: EffectList = vNode.effectList;
@ -58,20 +47,13 @@ export function callUseEffects(vNode: VNode) {
} }
export function runAsyncEffects() { export function runAsyncEffects() {
if (hookEffectRoot === null) {
return false;
}
const root = hookEffectRoot;
hookEffectRoot = null;
const preMode = copyExecuteMode(); const preMode = copyExecuteMode();
changeMode(InRender, true); changeMode(InRender, true);
// 调用effect destroy // 调用effect destroy
const removeEffects = hookRemoveEffects; const removeEffects = hookRemoveEffects;
hookRemoveEffects = []; hookRemoveEffects = [];
removeEffects.forEach(({effect, vNode}) => { removeEffects.forEach(({effect}) => {
const destroy = effect.removeEffect; const destroy = effect.removeEffect;
effect.removeEffect = undefined; effect.removeEffect = undefined;
@ -87,7 +69,7 @@ export function runAsyncEffects() {
// 调用effect create // 调用effect create
const createEffects = hookEffects; const createEffects = hookEffects;
hookEffects = []; hookEffects = [];
createEffects.forEach(({effect, vNode}) => { createEffects.forEach(({effect}) => {
try { try {
const create = effect.effect; const create = effect.effect;
@ -98,10 +80,6 @@ export function runAsyncEffects() {
}); });
setExecuteMode(preMode); setExecuteMode(preMode);
callRenderQueueImmediate();
return true;
} }
// 在销毁vNode的时候调用remove // 在销毁vNode的时候调用remove
@ -131,10 +109,10 @@ export function callUseLayoutEffectRemove(vNode: VNode) {
const effectList: EffectList = vNode.effectList; const effectList: EffectList = vNode.effectList;
const layoutLabel = EffectConstant.LayoutEffect | EffectConstant.DepsChange; const layoutLabel = EffectConstant.LayoutEffect | EffectConstant.DepsChange;
effectList.forEach(item => { effectList.forEach(effect => {
if ((item.effectConstant & layoutLabel) === layoutLabel) { if ((effect.effectConstant & layoutLabel) === layoutLabel) {
const remove = item.removeEffect; const remove = effect.removeEffect;
item.removeEffect = undefined; effect.removeEffect = undefined;
if (typeof remove === 'function') { if (typeof remove === 'function') {
remove(); remove();
} }
@ -147,10 +125,10 @@ export function callUseLayoutEffectCreate(vNode: VNode) {
const effectList: EffectList = vNode.effectList; const effectList: EffectList = vNode.effectList;
const layoutLabel = EffectConstant.LayoutEffect | EffectConstant.DepsChange; const layoutLabel = EffectConstant.LayoutEffect | EffectConstant.DepsChange;
effectList.forEach(item => { effectList.forEach(effect => {
if ((item.effectConstant & layoutLabel) === layoutLabel) { if ((effect.effectConstant & layoutLabel) === layoutLabel) {
const create = item.effect; const create = effect.effect;
item.removeEffect = create(); effect.removeEffect = create();
} }
}); });
} }

View File

@ -22,7 +22,7 @@ import {
} from '../ExecuteMode'; } from '../ExecuteMode';
import { import {
isSchedulingEffects, isSchedulingEffects,
setSchedulingEffects, setHookEffectRoot, setSchedulingEffects,
} from './HookEffectHandler'; } from './HookEffectHandler';
import {getStartVNode} from '../GlobalVar'; import {getStartVNode} from '../GlobalVar';
@ -67,9 +67,6 @@ export function submitToRender(treeRoot) {
if (isSchedulingEffects()) { if (isSchedulingEffects()) {
setSchedulingEffects(false); setSchedulingEffects(false);
// 记录root说明这个root有副作用要执行
setHookEffectRoot(treeRoot);
} }
// 统计root同步重渲染的次数如果太多可能是无线循环 // 统计root同步重渲染的次数如果太多可能是无线循环