Skip to content

分组group变换形状以后,撤销需要撤销2次才能回到前一步的状态[Bug Report]:  #1532

Closed as not planned

Description

@DavisGYF

发生了什么?

a9c439ed0b325eb6b7dfbed4bb83f1bd.mp4

logicflow/core版本

ex.1.2.18

logicflow/extension版本

ex.1.2.19

logicflow/engine版本

No response

浏览器&环境

Chrome

Activity

  1. wfxs2012 commented on Aug 11, 2024

    @wfxs2012

    我使用 官方提供的一键美化后 @antv/layout 后,上一步也是需要两次 ,在有group节点的情况下 应该是bug吧

  2. Zsynuting commented on Jun 23, 2026

    @Zsynuting
    Collaborator

    调查结论(2026-06-23)

    在 dynamic-group-regression 的 resize-undo-twice 场景及代码路径上做了核对,结论如下。

    为何难以稳定复现

    场景 history 新增条数 一次 undo 能否回到 resize 前
    一次快速 resize(拖角点后立即松手) 1 条 能
    分多步、每步间隔 >100ms 的慢速 resize 多条 需多次 undo 才完全回去

    回归示例使用默认 dynamic-group(transformWithContainer=false、无连线、无 label 模式)。快速拖一下角点时,当前版本通常一次 undo 即可恢复,与 resolution: cannot-reproduce 一致。

    代码层面仍存在的机制性隐患

    根因不在「分组 undo 写坏」,而在于 resize 手势未被当作原子操作记入 history:

    1. Resize 期间会持续写 history
      History 通过 deepObserve + waitTime: 100ms 监听 graphModel。modelToHistoryData() 仅在节点 isDragging === true 时跳过写入;而 resize 控制点使用 StepDrag,不会设置 nodeModel.isDragging(该标志仅用于拖节点本体)。因此拖节点移动 → 拖动中不写 history;拖角点 resize → 每步 handleResize 改 width/height/x/y → debounce 到期即落盘。

    2. 慢速/断续 resize 会拆成多条快照
      拖得慢或中途停顿超过约 100ms,一次手势可产生 2 条及以上 history,体感即为「要 undo 两次才回到 resize 前」。

    3. 分组特有路径可能叠加变更(条件触发)

      • transformWithContainer: true 时,group resize 会联动 handleResize 每个子节点;
      • Label 模式在 node:resize 时会更新 _label;
      • 布局(如 @antv/layout 一键美化)经 renderRawData 写回时也可能与 debounce 叠加。
        默认回归场景未覆盖上述组合。
    4. onDragEnd 的 moveTo 不是主因
      core ResizeControl.onDragEnd 中 grid 对齐已注释,单独通常不会多记一条。

    结论与处理建议

    • 默认快速 resize:当前行为可接受,不作为稳定 bug 优先修复。
    • 隐患仍在:resize 与 node drag 的 history 语义不对称,特定配置或慢速操作下仍可能出现「一次操作、多次 undo」。
    • 若后续要修:可在 resize 手势期间抑制 history(类似 isDragging / 新增 isResizing),或在 onDragEnd 仅写入一条「resize 前 → resize 后」快照。

    本 issue 暂列入「暂不修复」,待有明确产品需求或更多复现路径时再排期。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions