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,35 +21,34 @@ 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(); };
});
const updateSize = () => {
// 无子节点时
if (node.blocks.length === 0) {
setWidth(size.width);
setHeight(size.height);
return;
}
// 存在子节点时,只监听宽高变化
setWidth(transform.bounds.width);
setHeight(transform.bounds.height);
}; };
useEffect(() => { useEffect(() => {
const updateSize = () => {
// 无子节点时
if (node.blocks.length === 0) {
setWidth(size.width);
setHeight(size.height);
return;
}
// 存在子节点时,只监听宽高变化
if (width !== transform.bounds.width) {
setWidth(transform.bounds.width);
}
if (height !== transform.bounds.height) {
setHeight(transform.bounds.height);
}
};
updateSize();
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({