@anandarizki/use-undo-redo

中文文档
1.1.0发布于 2026/10/22MITTypeScriptCommonJS近 30 天下载 2924

钩子提供了一个简单有效的方法来管理您的 React 应用程序中的撤销和重做功能

中文使用文档
文档目录9 节
  1. 兼容性
  2. 演示
  3. 发起人
  4. 特征
  5. 安装
  6. 基本用途
  7. 纳入现有构成部分
  8. 使用未读重写
  9. 页:1

使用- 无效重写

这个 useUndoRedo 钩子提供了一种简单而高效的方法来管理您的 React 应用程序中的撤销和重做功能. 它帮助您保持状态变化的历史,使用户能够无缝地浏览您的应用程序的不同状态.

兼容性

反应18.2或后期,包括反应19("react": ">=18.2.0 <20") (中文(简体) ).

演示

https://undoredo.rizki.id 页面存档备份,存于互联网档案馆

发起人

JSpark 发起人: JSPARK 语录

特征

  • 撤销和重做:无所顾忌地向后航行并贯穿州史.
  • 可配置的历史能力: 定义保存在内存中的最大状态更改数.
  • 跳过支持:通过控制州史更新的频率来优化性能.
  • 历史管理:访问完整历史堆栈,重置历史,或跳到特定点.
  • 轻而易举地整合: 整合到现有反应组件所需的最小设置.

安装

npm i @anandarizki/use-undo-redo

基本用途

//import the hook
import { useUndoRedo } from "@anandarizki/use-undo-redo";

//your state handler
const [state, setState] = useState();

//initialize hooks and pass your state and setState as the argument
const [undo, redo] = useUndoRedo([state, setState]);

纳入现有构成部分

你不需要整顿你现有的州政府 这个钩子可以无缝地融入到您的代码中,只需要一个单行加法.

原始组件

import { useState } from "react";

function MyComponent() {
  const [count, setCount] = useState(0);

  return (
    <div>
      <div>
        <button onClick={() => setCount(count - 1)}>-</button>
        {count}
        <button onClick={() => setCount(count + 1)}>+</button>
      </div>
    </div>
  );
}

组件为 useUndoRedo

import { useState } from "react";
import { useUndoRedo } from "@anandarizki/use-undo-redo";

function MyComponent() {
  const [count, setCount] = useState(0);

  //new line
  const [undo, redo] = useUndoRedo([count, setCount]);

  return (
    <div>
      <div>
        <button onClick={() => setCount(count - 1)}>-</button>
        {count}
        <button onClick={() => setCount(count + 1)}>+</button>
      </div>

      <div>
        <button onClick={undo}>
          Undo
        </button>
        <button onClick={redo}>
          Redo
        </button>
      </div>
    </div>
  );
}

使用未读重写

useUndoRedo<T>(primaryState: [T, (v: T) => void], options?: Options<T>): Output<T>
  • 初级状态:包含状态值和状态设置函数的数组。 这使得钩子可以管理这个特定状态的历史.

  • 选项数字 :

    • 能力 (可选) : 历史中保存的最大条目数,包括起始状态,所以 capacity: 10 允许9个撤消步骤。 低于1的数值作为1处理 Infinity 所有东西都留着 默认为10.
    • 弹跳 (可选) : 以毫秒计解析历史更新的时间. 当您经常更新状态时, 即使用受控输入更新状态时, 这样做很有用 。 通话 undo 或者说 jumpTo 当更新正在等待它先记录时, 它可以被重装。 默认为 0( 不跳出) .
    • 克隆 (可选) : 状态值如何被复制到历史中 . true 用摇篮打入深层 cloneDeep· ; false 将值存储为- is, 它更快, 使用更少的内存, 但只有在您从未变异状态时才安全; 函数 (value) => copy 让您自己提供副本。 默认是 true。 。 。 .
  • 回返: 包含:

    • 撤销: 恢复到先前状态的函数.
    • 重做:一个向下一个状态前进的函数.
    • 具有下列属性的对象数字 :
      • 撤销: 一个布尔表示一个撤销操作是否可能.
      • 可重写:布尔表示复作操作是否可行.
      • 重设:一个清除历史并重置指针的函数.
      • 历史: 数组 { value, timestamp } 代表当前状态历史的条目。 当作只读.
      • 指针: 当前条目的索引 history。 。 。 .
      • 跳转到:按索引跳到历史特定点的函数. 无效的索引被忽略 .

undo, (中文(简体) ), redo, (中文(简体) ), jumpTo 财务报告和审定财务报表 reset 保持同一身份,所以他们可以安全地传递给记忆部件或用作实际依赖.

这个 Options, (中文(简体) ), Output 财务报告和审定财务报表 StateHistory 为 TypeScript 用户导出类型.

页:1

  • 通过深度平等检查检测到变化( lodash) isEqual) (中文(简体) ). 设置与当前条目内容相同的新对象不记录为更改.
  • 私人类案例(#field)属性不能被lodash比较或克隆;取而代之的是存储纯数据.

完全使用

const [undo, redo, { canUndo, canRedo, jumpTo, history, pointer, reset }] =
  useUndoRedo([state, setState], {
    debounce: 500,
    capacity: 20,
  });

版本与发布记录

@anandarizki/use-undo-redo 共发布 11 个版本,首次发布于 2024/07/24;过去 12 个月发布了 1 个版本。

版本发布日期距今
1.1.0latest2026/10/2216 天前
1.0.92025/09/201.1 年前
1.0.82025/09/201.1 年前
1.0.72024/07/262 年前
1.0.62024/07/262 年前
1.0.52024/07/262 年前

关于 @anandarizki/use-undo-redo 的常见问题

@anandarizki/use-undo-redo 是什么?

钩子提供了一个简单有效的方法来管理您的 React 应用程序中的撤销和重做功能

如何安装 @anandarizki/use-undo-redo?

在项目目录运行 npm install @anandarizki/use-undo-redo,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:react(>=18.2.0 <20)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@anandarizki/use-undo-redo 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@anandarizki/use-undo-redo 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@anandarizki/use-undo-redo 可以商用吗?

@anandarizki/use-undo-redo 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@anandarizki/use-undo-redo 的下载量有多少?

根据 npm 官方下载统计,@anandarizki/use-undo-redo 在 2026/10/06 – 2026/11/04 这 30 天内被下载 2,924 次,日均约 97 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@anandarizki/use-undo-redo 还在维护吗?

最新版本 1.1.0 发布于 2026/10/22(16 天前);至今共发布 11 个版本,其中过去 12 个月发布了 1 个;首次发布于 2024/07/24。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。