2

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

4

4 回答 4

2

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

我使用常规 NGXS@Selector语法来挖掘我感兴趣的状态切片,然后直接订阅它Observable并使用 rxjs成对运算符为我提供新发出的值和以前的值。对于我想要使用这些值的方式来说效果很好,所以它可能适合你所追求的。

于 2018-12-27T08:26:27.530 回答
2

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

根据您的需要调整...

希望这有所帮助 :-)

于 2019-03-20T13:10:21.703 回答
1

默认情况下无法获取之前的状态,但您绝对可以创建一个服务来监视状态并将副本推送到自己的堆栈中。然后,您可以使用reset商店上的方法恢复此状态。

您可能selectreset使用store. 有关更多信息,请参见此处:https ://ngxs.gitbook.io/ngxs/concepts/store#selecting-state

于 2018-12-22T04:43:56.813 回答
-1

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

于 2020-06-12T14:22:23.200 回答