@fluidframework/undo-redo (英语)
此套件提供了内存倒置重做堆栈的执行,以及共享地图和 共享分类序列分布式数据结构.
使用 Fluid 框架库
对于依赖流体框架库的公共API,我们建议 ^ (caret)版本范围.
例如,使用 ^1.3.4。 。 。 .
依赖不稳定的API,例如: beta API,我们推荐一个更具限制性的版本范围.
例如,使用一个 ~ 版本范围.
安装
运行此命令以安装软件包 :
npm i @fluidframework/undo-redo
API 文档
读取 @fluidframework/undo-redo (英语) API 文档 https://fluidframework.com/docs/apis/undo-redo 页面存档备份,存于互联网档案馆。 。 。 .
撤销重做堆栈管理器
取消重做堆栈管理器是发布撤销和重做命令的地方,它持有所有可撤销的堆栈和 可重做操作. 撤销重做堆栈管理器是堆栈.
外层堆栈包含操作,内层堆栈包含构成该操作的所有不可复制对象 操作。 这使得取消重做堆栈管理器的消费者可以确定被撤销的或 继续.
例如,您可以在单词级别下定义文本操作, 这样用户类型就可以关闭当前 当用户输入空格时操作。 当用户发出一个已键入字符的倒数中字时这样做 因为最后的空格将被取消,如果他们再发布一个撤销的字,那么前面的字就将被取消.
如上所述,操作是一叠可复制的对象. 如名称所示,这些物体有: 能够还原一些变化 这通常意味着两件事 他们必须能够追踪 改变,并存储 有足够的元数据可以恢复这一变化.
为了创建 IRevertible 对象,为常用的数据结构提供了取消重写处理器.
共享地图 撤消重做处理器
共享MapUndo RedoHandler 生成 IRevertible 对象, 共享MapRevertible 用于对共享Map 所做的所有局部修改, 并把它们推向当前在撤销重做堆栈上的操作 。 这些对象通过"共享地图"的值变化事件来创建. 此处理器永远不会关闭堆栈上的当前操作 。 这是一个相当简单的处理器,也是一个很好的例子,可以用来了解不可复制对象应如何工作.
共享部分序列 撤销重做处理器
共享区块顺序 UndoRedoHandler 生成可复制对象, 共享区块顺序可复制任意 以"共享链"等基于序列的分布式数据结构.
此处理器将每个本地插入、删除和注释操作的共享区块序列复制到 顺序 物体通过序列Delta事件生成. 类似共享的地图 此处理器永远不会关闭堆栈上的当前操作 .
这个处理器比"共享MapUndo RedoHandler"更复杂. 处理器本身会分批处理共享区块顺序 更改为最小的不可复制对象数量,以尽可能减少内存和性能管理 跟踪更改以返回的序列 .
共享片段顺序可逆
追踪和回落变化的重力 共享区块序列. 这是通过跟踪小组的物体完成的。 一个跟踪小组创建一个双向链接 在自己和部分之间 这种联系在分块移动、分块、合并和去除之间保持。 当a 序列三角洲事件被发射 事件所包含的部分被添加到跟踪小组中 追踪小组是 然后跟踪到更多的元数据,如三角洲类型和注释属性变化。 从 跟踪小组的片段,我们可以在当前文档中找到受原始变化影响的区域,甚至 面对其他变化。 片段还包含了可以使用的内容. 随着范围,内容, 和元数据 我们可以还原 原始变化的序列.
如上文所指出,在撤销重做方面有一些内存和性能间接费用。 管理费来自 追踪组 这种管理费用表现在以下几个方面:
- 跟踪组中已删除的片段不会是从后置树结构中收集的垃圾 .
- 片段只有拥有全部相同的跟踪组才能被合并.
这个对象可以将创建的跟踪小组的数量最小化,因此这个高架高度非常低. 取消重做基础设施 完全为记忆,所以不影响其他用户或会话。 如果自定义 IRevitable 对象使用跟踪组 应铭记这种间接费用,以避免可能出现的业绩问题.
客户最低要求
Fluid框架客户端库支持此文档中的平台. 这些要求有意具有限制性. 在一个主要的版本系列中,我们可以放松这些要求,但我们不能使其更严格. 对于长期支持(LTS)版本,我们可能需要支持这些平台几年.
其他配置可以奏效,但Fluid框架不支持. 如果一个不支持的配置停止工作, 我们不会将此归类为错误 . 要请求支持未列出的配置, 请存档 . 产品组会评估你的要求. 在此问题上,请具体说明配置的现状:
- 配置有效但需要官方支持.
- 配置不起作用,需要更改.
支持的运行时间
- Fluid框架支持节点.js版本22和24同时收到 上游支助。 。 。 .
- 流体框架将停止支持第22版 当上游支持于2027-04-30结束时。 。 。 .
- 流体框架不支持节点.js与
--no-experimental-fetch旗帜.
- Fluid框架支持支持ES2022标准库的现代浏览器.
支持的工具
- 类型脚本 6.0数字 :
- 流体框架支持全部
strict选项. - 设定建设目标(
lib, (中文(简体) ),target改为:ES2022或后会. - 启用
strictNullChecks。 。 。 . - 流体框架不支持 在 TypeScript 6.0 中贬值的配置选项。 。 。 .
- 流体框架不完全支持
exactOptionalPropertyTypes。 。 。 . 如果您启用此选项, 请不要使用in, (中文(简体) ),Reflect.has, (中文(简体) ),Object.hasOwn,或Object.prototype.hasOwnProperty改为Fluid框架类型的窄成员. 这些方法可以错误地排除undefined从可能的值.
- 流体框架支持全部
- 网络软件包 页:1
- 我们不需要一个特定的捆绑者. 其他处理ES模块的捆绑机可以工作,但我们只积极测试网页包.
模块分辨率
在类型脚本中 compilerOptions,使用时 Node16, (中文(简体) ), Node20, (中文(简体) ), NodeNext,或 Bundler 模块分辨率.
这些设置遵循 节点.js v12+无害环境管理 分辨率和加载算法。 。 。 .
不使用 Node10 模块分辨率.
模块格式
- ES模块: 使用ES模块来消耗Fluid框架客户端软件包,包括在Node.js中.
- 常见JS : Fluid Framework在3.0版本或后期不正式支持CommonJS.
贡献准则
你们可以 贡献 通过这些方式实现流体框架:
详细指示改为: repo 文档。 。 。 .
本项目遵循 Microsoft 开源行为守则。 。 。 . 更多信息,改为: 《行为守则》经常被问到的问题。 。 。 . 问题或评论,联系 打开码@ microsoft.com。 。 。 .
这个项目可能包含微软项目的商标或标志,产品,或服务. 这些商标或标志的使用必须遵循微软 商标和品牌准则。 。 。 . 在这个项目的修改后版本中使用微软商标或标志不得造成混淆或暗示微软赞助.
帮助
读取 流体框架文件 用于了解流体框架概念和API.
要求提供文件未载列的资料, 创建问题。 。 。 .
商标
这个项目可能包含微软项目的商标或标志,产品,或服务.
这些商标或标志的使用必须遵循微软的 商标和品牌准则。 。 。 .
在这个项目的修改后版本中使用微软商标或标志不得造成混淆或暗示微软赞助.