acttree
简要说明
acttree
(操作树)是一个用于实现撤销重做功能的状态存储工具
特点
- 基于操作记录:
state
(状态数据)只有一个,它只是把每一次执行的action
(操作)记录起来,便于状态的还原与重现 - 多支路重做: 大部分撤销重做工具的记录结构都是线性的,而它是树状的,能重现多个状态
- 安全撤销: 可以选择手动编写每一种操作的撤销方式,也可以省略,交给代理去完成
- 类型安全: 由
typescript
语言实现类型约束与推断
适用场景
具有MV
架构的程序,如使用Vue
搭建的应用
参考文档
工具函数
函数名 | 描述 | 参数 |
---|---|---|
createStore | 创建一个状态存储实例 | options 配置对象 |
createModule | 创建一个模块 | parentModule 父模块,必须有父模块才能创建 name 模块名 options 配置对象 |
options
配置对象属性名 | 说明 | 示例 |
---|---|---|
tierLimit | 可撤销层数限制,运行时超出会舍弃最旧结点,小于1则不生效 | - |
parallLimit | 可重做的纵向层数,运行时超出会舍弃最旧子树,小于1则不生效 | - |
state | 状态数据源,可以是一个对象,或返回数据源的函数, 如果有参数,第一个参数是父模块的数据源 |
{ state: { table: [1, 2, 3] } } |
getters | 视图集合,成员为返回部分数据的函数 | { getters: { table(state) { return state.table } } } |
actions | 操作集合,成员为必须含有do方法的对象,undo方法可选 | { actions: { add: { do(state, item) { state.table.push(item) } } } } |
modules | 模块集合,成员为子模块的配置对象 | { modules: { state: (state) => { return state.table }, actions: { add: { do(state, item) { state.push(item) } } } } } |
ActModule
、ActTree
状态存储示例属性名 | 类型 | 说明 |
---|---|---|
parentModule | ActModule | 父模块 |
tierLimit | number | 撤销层数限制 |
parallLimit | number | 重做纵向层数限制 |
getters | object | 视图集合,从外部可以通过该属性来获取状态数据 |
方法名 | 参数 | 说明 |
---|---|---|
nowTier | - | 返回当前状态的结点层级 |
undoable | - | 当前状态是否还能撤销 |
redoLength | - | 返回当前状态的可重做分支数 |
isFull | - | 返回当前结点树是否已满 |
isEmpty | - | 返回当前结点树是否为空 |
recover | tier | 将数据撤销到第tier层 |
emptying | - | 清空当前状态之前的结点 |
addListener | type,listener | 添加事件监听器 |
removeListener | type,listener | 移除事件监听器 |
createModules | options | 创建一个或多个子模块 |
getModule | modulePath | 根据路径modulePath获取某个后代模块 |
do | actionKey,args | 将args作为执行参数,执行名为actionKey的操作 |
undo | - | 撤销一次 |
redo | index | 从index分支重做一次 |