首页 > 解决方案 > NgRx 选择器过滤空值

问题描述

我们的 Web 应用程序加载 NgRx 存储中的值,这些值在初始状态下设置为 null。我正在寻找一种很好地过滤非空值的方法,因为我一直在组件中看到

this.myValue = this.store.pipe(
  select(mySelector),
  filter(notNull),
);

// where 

const notNull = (data) => data !== null;

而且我认为这种代码重复,在选择器级别处理它会很棒。但我也对其他解决方案持开放态度。

我尝试过的一件事是自定义createSelector

import {createSelector, createSelectorFactory, defaultMemoize} from '@ngrx/store';

const isEqualOrNull = (a: any, b: any): boolean =>
  a === b || b === null;

const createSelectorNotNull = createSelectorFactory((projectionFn) =>
  defaultMemoize(projectionFn, isEqualOrNull));

不幸的是,这个解决方案不能处理初始null值,只能处理更多的值。

这个看似常见的问题有没有很好的解决方案?

标签: angularrxjsngrx

解决方案


我认为这是不可能的,因为正如您第一次提到的那样,它不会使用您提供的比较函数,只是执行并返回结果。

为避免代码重复,您可以创建自己的可管道操作符


推荐阅读