所以,我第一次尝试使用 NGXS,我注意到当我在 Angular 的ngOnInit()
函数中添加以下代码时,它总是获取 API:
this.store.dispatch(new FooActions.GetAll());
这似乎是一个愚蠢的问题,但是,NGXS 不应该检查商店是否已经有数据并使用它而不是调用 API 吗?或者它不是功能的一部分?我是否应该在每次发送从服务器获取数据的操作时手动进行检查?
所以,我第一次尝试使用 NGXS,我注意到当我在 Angular 的ngOnInit()
函数中添加以下代码时,它总是获取 API:
this.store.dispatch(new FooActions.GetAll());
这似乎是一个愚蠢的问题,但是,NGXS 不应该检查商店是否已经有数据并使用它而不是调用 API 吗?或者它不是功能的一部分?我是否应该在每次发送从服务器获取数据的操作时手动进行检查?
因此,这里有两件事可以减少 API 调用。当您执行 API 调用时,浏览器会获取数据,如果启用缓存,它会将数据保存在缓存中。
现在,当您使用状态管理时,您需要在每次刷新或重新加载应用程序时将 API 数据存储到存储中,因为它不是数据的持久存储。
这意味着,在调用 API 之前,您应该检查存储中是否有数据。如果您有数据,只需从存储中获取它并遵循相同的应用程序流程,否则访问 API 并获取新数据并将其保存在存储中。
您可以使用selectSnapshot
selectSnapshot(StateName.SelectorName);
例子
const dataInsdeStore = this.store.selectSnapshot(StateName.SelectorName);
if (!dataInsdeStore) {
this.store.dispatch(new FooActions.GetAll());
}
dataInsdeStore
返回数据,则表示store已有数据,无需调用APIdataInsdeStore
返回 null 或为空,则需要调用 API,因为状态为空资源selectSnapshot