0

所以,我第一次尝试使用 NGXS,我注意到当我在 Angular 的ngOnInit()函数中添加以下代码时,它总是获取 API:

this.store.dispatch(new FooActions.GetAll());

这似乎是一个愚蠢的问题,但是,NGXS 不应该检查商店是否已经有数据并使用它而不是调用 API 吗?或者它不是功能的一部分?我是否应该在每次发送从服务器获取数据的操作时手动进行检查?

4

2 回答 2

1

因此,这里有两件事可以减少 API 调用。当您执行 API 调用时,浏览器会获取数据,如果启用缓存,它会将数据保存在缓存中。

现在,当您使用状态管理时,您需要在每次刷新或重新加载应用程序时将 API 数据存储到存储中,因为它不是数据的持久存储。

这意味着,在调用 API 之前,您应该检查存储中是否有数据。如果您有数据,只需从存储中获取它并遵循相同的应用程序流程,否则访问 API 并获取新数据并将其保存在存储中。

于 2021-11-16T08:01:09.723 回答
0

您可以使用selectSnapshot

selectSnapshot(StateName.SelectorName);

例子

const dataInsdeStore = this.store.selectSnapshot(StateName.SelectorName);

if (!dataInsdeStore) {

   this.store.dispatch(new FooActions.GetAll());

}
  1. 如果dataInsdeStore返回数据,则表示store已有数据,无需调用API
  2. 如果dataInsdeStore返回 null 或为空,则需要调用 API,因为状态为空

资源selectSnapshot

ngxs 文档

于 2021-11-29T19:05:27.330 回答