我们的 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值,只能处理更多的初始值。
这个看似常见的问题有什么好的解决方案吗?
最终,我得出了与@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)
| 归档时间: |
|
| 查看次数: |
4261 次 |
| 最近记录: |