fix(container): container render bounds delay

This commit is contained in:
liuyangxing 2025-03-17 20:45:21 +08:00
parent d8ce164255
commit 970fd09ec4
2 changed files with 21 additions and 21 deletions

View File

@ -21,13 +21,10 @@ export const ContainerNodeContainer: FC<IContainerNodeContainer> = ({ children }
const [height, setHeight] = useState(size.height); const [height, setHeight] = useState(size.height);
const updatePorts = () => { const updatePorts = () => {
requestAnimationFrame(() => {
const portsData = node.getData<WorkflowNodePortsData>(WorkflowNodePortsData); const portsData = node.getData<WorkflowNodePortsData>(WorkflowNodePortsData);
portsData.updateDynamicPorts(); portsData.updateDynamicPorts();
});
}; };
useEffect(() => {
const updateSize = () => { const updateSize = () => {
// 无子节点时 // 无子节点时
if (node.blocks.length === 0) { if (node.blocks.length === 0) {
@ -36,20 +33,22 @@ export const ContainerNodeContainer: FC<IContainerNodeContainer> = ({ children }
return; return;
} }
// 存在子节点时,只监听宽高变化 // 存在子节点时,只监听宽高变化
if (width !== transform.bounds.width) {
setWidth(transform.bounds.width); setWidth(transform.bounds.width);
}
if (height !== transform.bounds.height) {
setHeight(transform.bounds.height); setHeight(transform.bounds.height);
}
}; };
updateSize();
useEffect(() => {
const dispose = transform.onDataChange(() => { const dispose = transform.onDataChange(() => {
updateSize(); updateSize();
updatePorts(); updatePorts();
}); });
return () => dispose.dispose(); return () => dispose.dispose();
}, [transform]); }, [transform, width, height]);
useEffect(() => {
// 初始化触发一次
updateSize();
}, []);
return ( return (
<ContainerNodeContainerStyle <ContainerNodeContainerStyle

View File

@ -102,6 +102,7 @@ export class NodeIntoContainerService {
x: parentTransform.position.x + nodeJSON.meta!.position!.x, x: parentTransform.position.x + nodeJSON.meta!.position!.x,
y: parentTransform.position.y + nodeJSON.meta!.position!.y, y: parentTransform.position.y + nodeJSON.meta!.position!.y,
}); });
parentTransform.fireChange();
await this.nextFrame(); await this.nextFrame();
parentTransform.fireChange(); parentTransform.fireChange();
this.emitter.fire({ this.emitter.fire({