### 发生了什么? https://github.com/didi/LogicFlow/assets/34234187/40d28e2d-4707-4046-8efb-6155d8b6b07d ### logicflow/core版本 ex.1.2.18 ### logicflow/extension版本 ex.1.2.19 ### logicflow/engine版本 _No response_ ### 浏览器&环境 Chrome
Activity
wfxs2012 commentedon Aug 11, 2024
我使用 官方提供的一键美化后 @antv/layout 后,上一步也是需要两次 ,在有group节点的情况下 应该是bug吧
Zsynuting commentedon Jun 23, 2026
调查结论(2026-06-23)
在
dynamic-group-regression的resize-undo-twice场景及代码路径上做了核对,结论如下。为何难以稳定复现
回归示例使用默认
dynamic-group(transformWithContainer=false、无连线、无 label 模式)。快速拖一下角点时,当前版本通常一次 undo 即可恢复,与resolution: cannot-reproduce一致。代码层面仍存在的机制性隐患
根因不在「分组 undo 写坏」,而在于 resize 手势未被当作原子操作记入 history:
Resize 期间会持续写 history
History通过deepObserve+waitTime: 100ms监听graphModel。modelToHistoryData()仅在节点isDragging === true时跳过写入;而 resize 控制点使用StepDrag,不会设置nodeModel.isDragging(该标志仅用于拖节点本体)。因此拖节点移动 → 拖动中不写 history;拖角点 resize → 每步handleResize改 width/height/x/y → debounce 到期即落盘。慢速/断续 resize 会拆成多条快照
拖得慢或中途停顿超过约 100ms,一次手势可产生 2 条及以上 history,体感即为「要 undo 两次才回到 resize 前」。
分组特有路径可能叠加变更(条件触发)
transformWithContainer: true时,group resize 会联动handleResize每个子节点;node:resize时会更新_label;renderRawData写回时也可能与 debounce 叠加。默认回归场景未覆盖上述组合。
onDragEnd的moveTo不是主因core
ResizeControl.onDragEnd中 grid 对齐已注释,单独通常不会多记一条。结论与处理建议
isDragging/ 新增isResizing),或在onDragEnd仅写入一条「resize 前 → resize 后」快照。本 issue 暂列入「暂不修复」,待有明确产品需求或更多复现路径时再排期。