如何从NGXS商店获取以前的状态

时间:2018-12-20 22:52:17

标签: ngxs ngx-share

在NGXS中,我们具有getState()来获取当前状态。有没有办法从商店获取以前的状态?我正在寻找解决方案,因为我必须实现撤消/重做功能。谢谢!

4 个答案:

答案 0 :(得分:0)

默认情况下无法获取先前的状态,但是您可以肯定地创建一个服务来监视状态并将副本推入其自己的堆栈中。 然后,您可以在商店上使用reset方法恢复此状态。

您可能会使用select的{​​{1}}和reset方法。有关更多信息,请参见此处:https://ngxs.gitbook.io/ngxs/concepts/store#selecting-state

答案 1 :(得分:0)

@Mark Whitfield是正确的,因为没有直接方法可以使用NGXS来获取先前的状态。 使用NGXS,我有一个用例,我想知道先前的值以执行撤消样式操作。

我使用常规的NGXS @Selector语法进入我感兴趣的状态切片,然后直接订阅了该Observable并使用rxjs pairwise运算符给我新的发射值和先前的值。对于要使用这些值的方式效果很好,因此可能适合您的需求。

答案 2 :(得分:0)

您可以使用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); 
}

根据您的需要进行调整...

希望这会有所帮助:-)

答案 3 :(得分:0)

您可以使用npm中的“ redux-undo”来实现撤消和重做。这非常简单直接。 您可以找到文档here