在Redux中,一旦我们发出一个动作,我们就会得到一个具有更新值的新状态。以前的旧州发生了什么?
答案 0 :(得分:1)
旧州被丢弃。如果要保存它,则需要将其作为州的一部分加入。这里解释了一种方法:Implementing Undo History。
另一个选择是使用"事件采购"模型。如果您的主要状态仅仅是已经发生的所有操作的数组,并且您具有将主要状态中的数组减少为当前应用程序状态的派生状态。"以下是对榆树的想法的解释:Elm and Event Sourcing
答案 1 :(得分:1)
Redux状态只不过是你记忆中的javascript对象。该州只有一个版本,这是您最新的版本。
当您分派动作时,动作处理程序(reducer)是一个纯函数,它将旧状态转换为新状态。 state应该是不可变的,这意味着动作处理程序不会更改旧状态,而是获取它的副本,然后根据您的动作类型进行更改,然后返回它。它看起来像(“--->”表示调度):
initial state ---> state 1 ---> state 2 ---> state 3 ....
您可以安装redux plugin in chrome,您将看到该州的整个历史记录。
所以基本上,redux不保存任何旧状态,如果你想跟踪历史记录,你必须自己使用Stack
或使用其他一些库来实现。
我实际上使用数据结构stack
实现了事件跟踪,当状态发生变化时,你要push
进行堆叠,当你想要回到之前的状态时,你只需要pop
状态并发送一个特殊的改变状态的动作,这个特殊的调度不应该触发push
,但是非常粗略的想法。