【发布时间】:2018-12-20 22:52:17
【问题描述】:
在 NGXS 中,我们有 getState() 来获取当前状态。有没有办法从商店获取以前的状态?我正在寻找解决方案,因为我必须实现 Undo/Redo 类型的功能。谢谢!
【问题讨论】:
在 NGXS 中,我们有 getState() 来获取当前状态。有没有办法从商店获取以前的状态?我正在寻找解决方案,因为我必须实现 Undo/Redo 类型的功能。谢谢!
【问题讨论】:
您可以使用store.snapshot() 方法获取商店在特定时间的快照。您可以将快照存储在一个变量中,然后,在重新滚动的情况下,只需将store.reset() 与快照一起使用。
export class MyComponent {
private initialSnapshot: MyStoreStateModel;
constructor(private store: Store){
this.initialSnapshot = store.snapshot();
}
// ... component logic / state modification logic
rollback = () => this.store.reset(this.initialSnapshot);
}
根据您的需要调整...
希望这会有所帮助:-)
【讨论】:
@Mark Whitfield 是正确的,没有直接的方法可以使用 NGXS 获取先前的状态。 使用 NGXS 我有一个用例,我想知道以前的值来执行撤消式操作。
我使用常规 NGXS @Selector 语法来利用我感兴趣的状态切片,然后我直接订阅了 Observable 并使用 rxjs pairwise 运算符给我新的发射值和以前的值。非常适合我想要使用这些值的方式,因此它可能适合您的需求。
【讨论】:
默认情况下无法获取之前的状态,但是你绝对可以创建一个服务来监控状态并将副本推送到自己的堆栈中。
然后,您可以在商店中使用 reset 方法恢复此状态。
您可能会使用store 的select 和reset 方法。更多信息请看这里:https://ngxs.gitbook.io/ngxs/concepts/store#selecting-state
【讨论】:
您可以使用 npm 中的“redux-undo”来实现撤消和重做。这非常简单直接。 你可以找到文档here
【讨论】: