diff --git a/packages/f-engine/src/canvas/render/index.ts b/packages/f-engine/src/canvas/render/index.ts
index 35a8fbc7..f1381c6a 100644
--- a/packages/f-engine/src/canvas/render/index.ts
+++ b/packages/f-engine/src/canvas/render/index.ts
@@ -188,14 +188,16 @@ function createElement(parent: VNode, element: JSX.Element): VNode | VNode[] | n
function destroyElement(vNode: VNode | VNode[] | null) {
Children.map(vNode, (node: VNode | null) => {
if (!node) return;
- const { component, children } = node;
+ const { component, children, shape, tag } = node;
if (component) {
component.willUnmount();
destroyElement(children);
component.didUnmount();
component.destroy();
- } else {
+ } else if (children) {
destroyElement(children);
+ } else if (tag === Shape && shape) {
+ shape.destroy();
}
});
}
diff --git "a/packages/f-engine/test/canvas/render/__image_snapshots__/vnode-update-test-tsx-vnode-\346\233\264\346\226\260-\345\237\272\347\241\200\345\233\276\345\275\242\346\233\264\346\226\260-1-snap.png" "b/packages/f-engine/test/canvas/render/__image_snapshots__/vnode-update-test-tsx-vnode-\346\233\264\346\226\260-\345\237\272\347\241\200\345\233\276\345\275\242\346\233\264\346\226\260-1-snap.png"
new file mode 100644
index 00000000..c64c72b4
Binary files /dev/null and "b/packages/f-engine/test/canvas/render/__image_snapshots__/vnode-update-test-tsx-vnode-\346\233\264\346\226\260-\345\237\272\347\241\200\345\233\276\345\275\242\346\233\264\346\226\260-1-snap.png" differ
diff --git a/packages/f-engine/test/canvas/render/vnodeUpdate.test.tsx b/packages/f-engine/test/canvas/render/vnodeUpdate.test.tsx
index 09137be0..6e444c7e 100644
--- a/packages/f-engine/test/canvas/render/vnodeUpdate.test.tsx
+++ b/packages/f-engine/test/canvas/render/vnodeUpdate.test.tsx
@@ -42,4 +42,41 @@ describe('vnode 更新', () => {
expect(ref.current._vNode.props.update).toBe(true);
});
+ it('基础图形更新', async () => {
+ const context = createContext();
+ const { props } = (
+
+ );
+
+ const canvas = new Canvas(props);
+ await canvas.render();
+
+ const { props: nextProps } = (
+
+ );
+ await delay(500);
+ await canvas.update(nextProps);
+
+ await delay(200);
+ expect(context).toMatchImageSnapshot();
+ });
});