代码之家  ›  专栏  ›  技术社区  ›  Alberto Rivera

在NGRX上创建非内存化选择器

  •  3
  • Alberto Rivera  · 技术社区  · 8 年前

    是否可以在NGRX上创建非内存化选择器?

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

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

    如预期的那样,此选择器不有用,因为除非更改 timeout 。是否有任何方法使选择器非内存化,以便每次访问其值时都重新计算它?

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

    export const hasTimeoutFactory = () => createSelector(
      selectAuthStatusState,
      state => state.timeout < Date.now()
    );
    

    另一个解决办法是

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

    然后导入这个管道。

    1 回复  |  直到 8 年前
        1
  •  0
  •   bobthedeveloper    8 年前

    选择器具有 release 方法重置memoization,我认为这是您想要使用的方法。

    这可以用以下代码转换:

    this.timeout = this.store.pipe(select(hasTimeout));
    hasTimeout.release();
    

    Docs