diff --git a/libs/horizon/src/renderer/TreeBuilder.ts b/libs/horizon/src/renderer/TreeBuilder.ts
index c8b81ae7..683c9bc3 100644
--- a/libs/horizon/src/renderer/TreeBuilder.ts
+++ b/libs/horizon/src/renderer/TreeBuilder.ts
@@ -199,6 +199,10 @@ export function calcStartUpdateVNode(treeRoot: VNode) {
for (let i = 1; i < startNodePath.length; i++) {
const pathIndex = Number(startNodePath[i]);
node = getChildByIndex(node, pathIndex)!;
+ // 路径错误时,回退到从根更新
+ if (node == null) {
+ return treeRoot;
+ }
}
return node;
diff --git a/libs/horizon/src/renderer/render/LazyComponent.ts b/libs/horizon/src/renderer/render/LazyComponent.ts
index 7f81ab2a..27feb0af 100644
--- a/libs/horizon/src/renderer/render/LazyComponent.ts
+++ b/libs/horizon/src/renderer/render/LazyComponent.ts
@@ -61,6 +61,7 @@ function captureLazyComponent(
if (lazyRender) {
if (lazyVNodeTag === MemoComponent) {
// Memo要特殊处理
+ processing.effectList = null;
const memoVNodeProps = mergeDefaultProps(Component.type, lazyVNodeProps); // 需要整合defaultProps
return lazyRender(processing, Component, memoVNodeProps, shouldUpdate);
} else {
diff --git a/scripts/__tests__/ComponentTest/ForwardRef.test.js b/scripts/__tests__/ComponentTest/ForwardRef.test.js
new file mode 100644
index 00000000..993d800a
--- /dev/null
+++ b/scripts/__tests__/ComponentTest/ForwardRef.test.js
@@ -0,0 +1,45 @@
+import * as Horizon from '@cloudsop/horizon/index.ts';
+import { getLogUtils } from '../jest/testUtils';
+
+describe('ForwardRef', () => {
+ const LogUtils = getLogUtils();
+ it('ForwardRef包裹的函数组件应该正常触发effect', () => {
+ function App(props, ref) {
+ Horizon.useEffect(() => {
+ LogUtils.log('effect');
+ return () => {
+ LogUtils.log('effect remove');
+ };
+ });
+ return ;
+ }
+
+ const Wrapper = Horizon.forwardRef(App);
+
+ Horizon.act(() => {
+ Horizon.render(