在 ngrx 上创建非记忆选择器

Alb*_*era 6 ngrx angular ngrx-store

是否可以在 ngrx 上创建非记忆选择器?

我有一个非常小的选择器来检查存储中的值是否大于 Date.now()。

export const selectAuthState = createFeatureSelector<AuthState>('auth');
export const hasTimeout = createSelector(
  selectAuthState,
  state => state.timeout < Date.now()
);
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,这个选择器没有用,因为除非我更改 的值,否则它不会被重新计算timeout。有没有办法使选择器不被记忆,以便每次访问其值时都会重新计算?

我当前的解决方案是创建一个选择器工厂并每次都使用它,但我认为这不是最好的解决方案:

export const hasTimeoutFactory = () => createSelector(
  selectAuthStatusState,
  state => state.timeout < Date.now()
);
Run Code Online (Sandbox Code Playgroud)

另一种解决方案是做类似的事情

export const didTimeout = pipe(
  select(getTimeout), // using memoized value
  map(val => val < Date.now())
);
Run Code Online (Sandbox Code Playgroud)

然后导入这个管道。

bob*_*per 2

选择器有一种release重置记忆的方法,我认为这就是您想要使用的。

这翻译成以下代码:

this.timeout = this.store.pipe(select(hasTimeout));
hasTimeout.release();
Run Code Online (Sandbox Code Playgroud)

文档