@ngrx/Store 如何用于缓存?

Ant*_*ony 7 ngrx typescript2.0

ngrx 的支持者声称(例如此处)您可以并且应该将所有应用程序状态保存在一个 Store 中。这表明 @ngrx/Store 可用于缓存,因为缓存的内容是一种应用程序状态。

Web 应用程序中的缓存是一种在有数据时返回数据的东西,在没有数据时封装来自服务器的数据请求。在上高速缓存维基百科的文章称其为高速缓存命中时的数据可用和缓存未命中时,它不是。

从函数式编程的角度,我们可以立即看到从缓存中读取数据在功能上是不纯的——它有一个副作用,即可能从服务器请求数据并保留在缓存中。我不知道如何用 ngrx 做到这一点,例如,它要求它的选择器在功能上是纯的。

考虑使用 Angular教程中的RxJs Observables 缓存可能会有所帮助(据说 rxjs 与 ngrx 非常互补)。我们不必滚动很远就能找到getFriends()带有副作用的函数:

getFriends() {

  if(!this._friends){

    this._friends = this._http.get('./components/rxjs-caching/friends.json')
                        .map((res:Response) => res.json().friends)
                        .publishReplay(1)
                        .refCount();
  }

  return this._friends;
}
Run Code Online (Sandbox Code Playgroud)

此外,Store 的内容似乎对整个应用程序都是普遍可用的。唯一的控制是关于如何更新状态,但不经中介地在缓存的原始数据中四处游荡是愚蠢的,因为无法保证哪些缓存项可用,哪些不可用。

希望这些担忧可以得到缓解,并且有一种方法可以做到这一点,但我错过了。请你告诉我一个使用@ngrx/Store 作为缓存的好方法吗?

whe*_*ler 2

在 ngrx 中,如果您愿意的话,有一些减速器(纯函数)可以更改状态(或缓存)。这些减速器由您在商店中发送的操作触发。

您可以从存储中通过选择器请求数据切片并订阅它们的更改。

要实现缓存逻辑,您需要检查数据是否可用,如果不可用,您将调度“LoadDataSliceAction”之类的操作,该操作将触发副作用,然后将数据加载到存储中。

这有帮助吗?