我有这个选择器来选择具有ID的产品:
export const selectProductByID = () => createSelector(
selectProductsEntities,
(productsEntities, props) => productsEntities[props.id]
);
基本上,它为每个select()
调用返回一个新的选择器,以允许在传递的每个参数上进行记忆。
调用方式如下:
this.product$ = this.store.pipe(
select(fromProductSelectors.selectProductByID(),
{id: this.route.snapshot.params['pid']}));
这样可以加快访问运行代码的页面的速度,但是对我这样填充缓存似乎有点不负责任。 如果返回的数据集很大并且用户通过其ID访问其中的许多内容怎么办?
所以问题是ngrx会在何处存储已记录的数据,并且浏览器最终甚至在离开站点时是否会清除缓存?
答案 0 :(得分:0)
以下是您自己如何记住返回值的示例:
const memoise = f => {
const memo = {}
return (...args) => {
const memoKey = JSON.stringify(args);
memo[memoKey] = memo[memoKey] || f(...args)
return memo[memoKey]
}
}
如您所见,记忆值的保存与某些Object的任何其他属性一样(在函数闭包中),并且类似于NgRx implements memoization的方式。
要删除记忆值,NgRx提供了一种方法-release()
:
selectTotal.release()
释放选择器也会递归释放所有祖先选择器