Redux是否有内置的撤消操作的方法?

Vin*_*ent 12 redux

我正在构建一个应用程序,在用户向下滚动时执行操作.如果我可以在用户再次向上滚动时撤消这些操作,那将是很好的,基本上将滚动转换为浏览动作时间线的方式.

Redux中是否有内置方式来执行此操作?或者我是否必须为此编写中间件?

Dan*_*mov 12

Redux中是否有内置方式来执行此操作?或者我是否必须为此编写中间件?

在这种情况下,中间件听起来像是错误的想法,因为这纯粹是国家管理的关注点.相反,你可以编写一个带有reducer并返回reducer的函数,在此过程中通过动作历史跟踪来"增强"它.

我在这个答案中概述了这种方法,它类似于redux-undo的工作原理,除了不存储状态,你可以存储动作.(取决于你想要做出的权衡,以及是否能够以不同于他们发生的顺序"取消"行动是很重要的.)

  • 哈,有道理,谢谢.而且,我只是注意到你是先生.终极版; 非常感谢这个优秀的图书馆! (2认同)

Qim*_*ing 4

我相信这个想法与其说是“撤消”,不如说是每次动作通过 redux 时保存对整个状态树的引用。

您将拥有一个由不同时间的应用程序状态组成的历史堆栈。

let history = [state1, state2, state3]

// some action happens

let history = [state1, state2, state3, state4]

// some action happens

let history = [state1, state2, state3, state4, state5]

// undo an action

let history = [state1, state2, state3, state4]

state = state4
Run Code Online (Sandbox Code Playgroud)

要“撤消”操作,只需将应用程序状态替换为已保存的状态之一即可。

通过支持结构共享的数据结构可以提高效率,但在开发中我们实际上并不需要过多考虑资源限制。