Match-id-5694310a3f51322edad299f66fcfa5c6ac083f95
This commit is contained in:
commit
483d5f38e5
|
@ -7,9 +7,6 @@ import type {
|
|||
Effect as HookEffect,
|
||||
EffectList,
|
||||
} from '../hooks/HookType';
|
||||
import {
|
||||
callRenderQueueImmediate,
|
||||
} from '../taskExecutor/RenderQueue';
|
||||
import {runAsync} from '../taskExecutor/TaskExecutor';
|
||||
import {
|
||||
copyExecuteMode, InRender, setExecuteMode,changeMode
|
||||
|
@ -20,7 +17,6 @@ let hookEffects: Array<HookEffect | VNode> = [];
|
|||
let hookRemoveEffects: Array<HookEffect | VNode> = [];
|
||||
// 是否正在异步调度effects
|
||||
let isScheduling: boolean = false;
|
||||
let hookEffectRoot: VNode | null = null;
|
||||
|
||||
export function setSchedulingEffects(value) {
|
||||
isScheduling = value;
|
||||
|
@ -29,13 +25,6 @@ export function isSchedulingEffects() {
|
|||
return isScheduling;
|
||||
}
|
||||
|
||||
export function setHookEffectRoot(root: VNode | null) {
|
||||
hookEffectRoot = root;
|
||||
}
|
||||
export function getHookEffectRoot() {
|
||||
return hookEffectRoot;
|
||||
}
|
||||
|
||||
export function callUseEffects(vNode: VNode) {
|
||||
const effectList: EffectList = vNode.effectList;
|
||||
|
||||
|
@ -58,20 +47,13 @@ export function callUseEffects(vNode: VNode) {
|
|||
}
|
||||
|
||||
export function runAsyncEffects() {
|
||||
if (hookEffectRoot === null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const root = hookEffectRoot;
|
||||
hookEffectRoot = null;
|
||||
|
||||
const preMode = copyExecuteMode();
|
||||
changeMode(InRender, true);
|
||||
|
||||
// 调用effect destroy
|
||||
const removeEffects = hookRemoveEffects;
|
||||
hookRemoveEffects = [];
|
||||
removeEffects.forEach(({effect, vNode}) => {
|
||||
removeEffects.forEach(({effect}) => {
|
||||
const destroy = effect.removeEffect;
|
||||
effect.removeEffect = undefined;
|
||||
|
||||
|
@ -87,7 +69,7 @@ export function runAsyncEffects() {
|
|||
// 调用effect create
|
||||
const createEffects = hookEffects;
|
||||
hookEffects = [];
|
||||
createEffects.forEach(({effect, vNode}) => {
|
||||
createEffects.forEach(({effect}) => {
|
||||
try {
|
||||
const create = effect.effect;
|
||||
|
||||
|
@ -98,10 +80,6 @@ export function runAsyncEffects() {
|
|||
});
|
||||
|
||||
setExecuteMode(preMode);
|
||||
|
||||
callRenderQueueImmediate();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// 在销毁vNode的时候调用remove
|
||||
|
@ -131,10 +109,10 @@ export function callUseLayoutEffectRemove(vNode: VNode) {
|
|||
const effectList: EffectList = vNode.effectList;
|
||||
|
||||
const layoutLabel = EffectConstant.LayoutEffect | EffectConstant.DepsChange;
|
||||
effectList.forEach(item => {
|
||||
if ((item.effectConstant & layoutLabel) === layoutLabel) {
|
||||
const remove = item.removeEffect;
|
||||
item.removeEffect = undefined;
|
||||
effectList.forEach(effect => {
|
||||
if ((effect.effectConstant & layoutLabel) === layoutLabel) {
|
||||
const remove = effect.removeEffect;
|
||||
effect.removeEffect = undefined;
|
||||
if (typeof remove === 'function') {
|
||||
remove();
|
||||
}
|
||||
|
@ -147,10 +125,10 @@ export function callUseLayoutEffectCreate(vNode: VNode) {
|
|||
const effectList: EffectList = vNode.effectList;
|
||||
|
||||
const layoutLabel = EffectConstant.LayoutEffect | EffectConstant.DepsChange;
|
||||
effectList.forEach(item => {
|
||||
if ((item.effectConstant & layoutLabel) === layoutLabel) {
|
||||
const create = item.effect;
|
||||
item.removeEffect = create();
|
||||
effectList.forEach(effect => {
|
||||
if ((effect.effectConstant & layoutLabel) === layoutLabel) {
|
||||
const create = effect.effect;
|
||||
effect.removeEffect = create();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
@ -22,7 +22,7 @@ import {
|
|||
} from '../ExecuteMode';
|
||||
import {
|
||||
isSchedulingEffects,
|
||||
setSchedulingEffects, setHookEffectRoot,
|
||||
setSchedulingEffects,
|
||||
} from './HookEffectHandler';
|
||||
import {getStartVNode} from '../GlobalVar';
|
||||
|
||||
|
@ -67,9 +67,6 @@ export function submitToRender(treeRoot) {
|
|||
|
||||
if (isSchedulingEffects()) {
|
||||
setSchedulingEffects(false);
|
||||
|
||||
// 记录root,说明这个root有副作用要执行
|
||||
setHookEffectRoot(treeRoot);
|
||||
}
|
||||
|
||||
// 统计root同步重渲染的次数,如果太多可能是无线循环
|
||||
|
|
Loading…
Reference in New Issue