diff --git a/libs/horizon/src/renderer/UpdateHandler.ts b/libs/horizon/src/renderer/UpdateHandler.ts index d00f3ce9..a2b55485 100644 --- a/libs/horizon/src/renderer/UpdateHandler.ts +++ b/libs/horizon/src/renderer/UpdateHandler.ts @@ -72,7 +72,11 @@ function calcState( function collectCallbacks(vNode: VNode, update: Update) { if (update.callback !== null) { FlagUtils.markCallback(vNode); - vNode.stateCallbacks.push(update.callback); + if (vNode.stateCallbacks === null) { + vNode.stateCallbacks = [update.callback]; + } else { + vNode.stateCallbacks.push(update.callback); + } } } diff --git a/libs/horizon/src/renderer/submit/LifeCycleHandler.ts b/libs/horizon/src/renderer/submit/LifeCycleHandler.ts index be4152d1..354a179e 100644 --- a/libs/horizon/src/renderer/submit/LifeCycleHandler.ts +++ b/libs/horizon/src/renderer/submit/LifeCycleHandler.ts @@ -72,13 +72,14 @@ function callBeforeSubmitLifeCycles( // 调用vNode.stateCallbacks function callStateCallback(vNode: VNode, obj: any): void { const stateCallbacks = vNode.stateCallbacks; - vNode.stateCallbacks = []; - - stateCallbacks.forEach(callback => { - if (typeof callback === 'function') { - callback.call(obj); - } - }); + vNode.stateCallbacks = null; + if (stateCallbacks !== null) { + stateCallbacks.forEach(callback => { + if (typeof callback === 'function') { + callback.call(obj); + } + }); + } } // 调用界面变化后的生命周期 diff --git a/libs/horizon/src/renderer/vnode/VNode.ts b/libs/horizon/src/renderer/vnode/VNode.ts index 313b5a61..bf4aca7e 100644 --- a/libs/horizon/src/renderer/vnode/VNode.ts +++ b/libs/horizon/src/renderer/vnode/VNode.ts @@ -27,7 +27,7 @@ export class VNode { changeList: any = null; // DOM的变更列表 effectList: any[] | null = null; // useEffect 的更新数组 updates: any[] | null = null; // TreeRoot和ClassComponent使用的更新数组 - stateCallbacks: any[] | null = []; // 存放存在setState的第二个参数和HorizonDOM.render的第三个参数所在的node数组 + stateCallbacks: any[] | null = null; // 存放存在setState的第二个参数和HorizonDOM.render的第三个参数所在的node数组 isForceUpdate: boolean = false; // 是否使用强制更新 state: any = null; // ClassComponent和TreeRoot的状态