Vanilla Disintegratev1.6.1
ZH
本页内容

库从不替你决定撤销能保留多久。你要求留住某个节点,也由你决定何时放手。

保留已删除节点

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);
  }
}

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

不恢复并释放引用

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

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

控制内存

这里没有 TTL,也没有条目数量上限。库不会在背后删除内容,也不会替你自动清理。每个未使用的 RemovalId 最终都必须由 take() 消费、通过 discard() 释放,或由 discardAll() 批量清理。

撤销何时失效由应用决定,例如提示关闭、路由切换或历史记录提交时。

永久删除

不传 retain 时,对库而言这次删除已经是永久的:

effects.remove(element); // retain: false

操作完成后,操作对象与库的存储都不会继续保留该元素。

在 GitHub 上编辑此页