npm 包 @supcon/redux-undo-redo 使用教程

阅读时长 6 分钟读完

介绍

在前端应用中,我们通常会使用 Redux 来管理应用的状态。而在 Redux 中,有一个非常重要的概念,那就是状态的不可变性。这意味着我们不能直接修改状态,而是需要通过 dispatch 一个 action 来修改状态。

但是这种方式有一个缺点,就是当我们需要撤销或者重做某些操作时,比如撤销上一次删除操作,或者重做上一次撤销操作,我们需要手动编写相应的代码来实现。而 @supcon/redux-undo-redo 包则为我们提供了这样一种功能,可以帮助我们轻松地实现撤销和重做功能。

安装

我们可以通过 npm 来安装 @supcon/redux-undo-redo 包。在项目的根目录下,执行以下命令即可:

安装完成之后,我们需要在 Redux 的 store 中使用该包提供的相关中间件。

使用

1. 配置

我们可以在 createStore 函数的第二个参数中传入 @supcon/redux-undo-redo 中间件来启用其功能。此时需要注意几个配置项:

  • maxHistory 为撤销和重做的最大限制次数;
  • debug 用于开启调试模式。

2. 撤销操作

当我们需要撤销上一次操作时,我们可以 dispatch 一个 type 字段为 @@redux-undo/UNDO 的 action。

此时,redux-undo 会找到上一次的 action,将其执行的结果还原,并将当前状态更新为上一次的状态。并在调试模式下输出相关信息。

3. 重做操作

当我们需要重做上一次撤销的操作时,我们可以 dispatch 一个 type 字段为 @@redux-undo/REDO 的 action。

此时,redux-undo 会找到下一次的 action,将其执行的结果应用到当前的状态中,并将当前状态更新为下一次的状态。并在调试模式下输出相关信息。

4. 定制化操作

除了使用默认的撤销和重做操作以外,我们还可以通过定制化的方式来实现自己的操作。

我们可以在创建 store 的时候,在配置信息中添加 onUndoonRedo 两个钩子函数。当我们执行撤销或者重做操作时,redux-undo 就会自动调用这两个函数。

例如,我们可以在执行撤销操作时,打印出要撤销的操作的相关信息。

-- -------------------- ---- -------
----- ----- - ------------
  --------
  ----------------
    --------------------
      ------- -------- ------------- ---------------- -- -
        ----------------- --------------- -------------------------------------
      --
    --
  -
--

示例代码

-- -------------------- ---- -------
------ - ------------ --------------- - ---- --------
------ ------------------ ---- --------------------------

-- --- -----
----- ------------ - -
  ------ --
--

-- -------
-------- ------------- - ------------- ------- -
  ------ ------------- -
    ---- ------
      ------ -
        ---------
        ------ ----------- - --
      --
    ---- -----------
      ------ -
        ---------
        ------ ----------- - --
      --
    --------
      ------ ------
  -
-

-- -- -----
----- ----- - ------------
  --------
  ----------------
    --------------------
      ----------- ---
      ------- -------- ------------- ---------------- -- -
        ----------------- --------------- -------------------------------------
      --
      ------- -------- ------------- ------------ -- -
        ----------------- --------------- ---------------------------------
      --
      ------ -----
    --
  -
--

-- --------- ----- -----------
------------------ -- -
  ------------------------------
---

-- ----
---------------- ----- ----- ---
---------------- ----- ----- ---
---------------- ----- ---------- ---
---------------- ----- ----- ---
---------------- ----- ------------------- ---
---------------- ----- ------------------- ---

输出结果:

-- -------------------- ---- -------
- ------ - -
- ------ - -
- ------ - -
- ------ - -
------ ----------- --------------
----- ------- -----------
----- ------ -----------
---- ---- -------------------------
- ------ - -
------ ----------- --------------
----- ------- -----------
----- ------ -----------
---- ---- -------------------------------------------------------------------------
- ------ - -

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60065f8a238a385564ab6e04

纠错
反馈