NgRx 选择器过滤空值

fod*_*ma1 8 rxjs ngrx angular

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

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

// where 

const notNull = (data) => data !== null;
Run Code Online (Sandbox Code Playgroud)

我认为这个代码重复,在选择器级别处理这个会很棒。但我也愿意接受其他解决方案。

我尝试过的一件事是自定义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));
Run Code Online (Sandbox Code Playgroud)

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

这个看似常见的问题有什么好的解决方案吗?

fod*_*ma1 3

最终,我得出了与@timdeschrver 相同的结论。

import { select } from '@ngrx/store';
import { notNull } from './utils';
import { filter } from 'rxjs/operators';

export const selectNotNull = (selector, ...args) => (source$) =>
  select(selector, ...args)(source$)
    .pipe(filter(notNull));
Run Code Online (Sandbox Code Playgroud)