https://github.com/wangguangyou/undo-redo
封装immerjs实现撤销重写功能
https://github.com/wangguangyou/undo-redo
Last synced: 4 months ago
JSON representation
封装immerjs实现撤销重写功能
- Host: GitHub
- URL: https://github.com/wangguangyou/undo-redo
- Owner: wangguangyou
- Created: 2021-08-11T09:24:32.000Z (almost 4 years ago)
- Default Branch: main
- Last Pushed: 2021-08-11T09:39:20.000Z (almost 4 years ago)
- Last Synced: 2025-02-08T00:23:57.630Z (4 months ago)
- Language: JavaScript
- Size: 148 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# undo-redo
## 安装
`npm install immer-undoredo --save`
## 例子
```js
import UndoRedo from 'immer-undoredo'let textState = { a: { x: [0] } }
let undoRedo = new UndoRedo(textState)
undoRedo.produce((draft) => {
draft.a.x[0] = 1
draft.b = { x: 1, y: 1, z: [111] }
})
undoRedo.produce((draft) => {
draft.a.x = [2, 2]
draft.b.z = { cc: 123 }
draft.c = 2
})undoRedo.produce((draft) => {
draft.a = 3
draft.b = 3
draft.c = 3
draft.d = 3
})console.log(undoRedo.undo())
//{ a: { x: [ 2, 2 ] }, b: { x: 1, y: 1, z: { cc: 123 } }, c: 2 }undoRedo.produce((draft) => {
draft.a.x = [1, 2, 3, 4]
draft.b = 5
})
console.log(undoRedo.undo())
//{ a: { x: [ 2, 2 ] }, b: { x: 1, y: 1, z: { cc: 123 } }, c: 2 }console.log(undoRedo.redo())
//{ a: { x: [ 1, 2, 3, 4 ] }, b: 5, c: 2 }console.log(undoRedo.changeByIndex(1))
//{ a: { x: [ 1 ] }, b: { x: 1, y: 1, z: [ 111 ] } }console.log(undoRedo.changeByIndex(3))
//{ a: { x: [ 1, 2, 3, 4 ] }, b: 5, c: 2 }
```## 参数
1. 监听的原始对象
2. 操作越界是否静默失败,可选默认false| 实例方法 | 描述 | 参数 |
| :-------------- | -------------------- | :---------------------------------------------: |
| undo | 撤销更改 | `count` 撤销操作次数,默认为一次 |
| redo | 重写(还原)上次撤销 | `count` 重写操作次数,默认为一次 |
| changeByIndex | 将值定位为某一次更改 | `index `从0开始,0为初始值,每次修改index都会+1 |
| getInitialState | 获取初始值 | - |