Vanilla Disintegratev1.0.0
ZH
本页内容

库不会替应用决定撤销功能应保留多久。节点保留必须显式开启,也没有隐藏的 TTL 或数量上限。

保留已删除节点

const operation = effects.remove(element, {
  retain: true,
});

await operation.finished;
const id = operation.removalId;

retain: true 会把分离的原节点存入内部 Map,键为不透明的 RemovalId。节点不会被移动到隐藏容器或 DocumentFragment

取出并恢复

take(id) 返回节点,同时从存储中删除强引用。

if (id) {
  const retained = effects.take(id);

  if (retained) {
    destination.append(retained);
    effects.restore(retained);
  }
}

应用可选择 appendprependbefore 或框架自己的插入方法;库只读取插入后的最终几何位置。

不恢复并释放引用

effects.discard(removalId); // boolean
effects.discardAll(); // 释放的条目数

destroy() 也会清空所有保留节点。

控制内存

由于没有 TTL,每个未使用的 ID 最终必须由 take() 消费、通过 discard() 释放,或由 discardAll() 批量清理。应用可以在撤销提示关闭、路由切换或历史提交时执行该策略。

默认的 effects.remove(element) 等同于 retain: false,操作结束后库与操作对象都不会保留节点。

在 GitHub 上编辑此页