angular - 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
值,只能处理更多的值。
这个看似常见的问题有没有很好的解决方案?
解决方案
我认为这是不可能的,因为正如您第一次提到的那样,它不会使用您提供的比较函数,只是执行并返回结果。
为避免代码重复,您可以创建自己的可管道操作符。
推荐阅读
- c++ - 我们如何将 ostream 函数实现为类的成员函数,而不是作为友元函数,以便 i 可以用作虚函数?
- c# - 从串口读取内容并检查 C#
- excel - 如何创建一个输出一系列单元格内容的excel函数
- encryption - 为什么 WebCryptoAPI RSA-OAEP 加密功能无法使用给定密钥大小的预期最大块大小?
- javascript - SignalR 客户端连接到不同的服务器
- elixir - 在 Elixir 中编写嵌套 for 循环的更好方法
- azure - 虚拟助手模板和整合技能
- firebase - 单击退出按钮后,我无法从主页导航到登录页面
- java - 我在单列中得到星形图案输出
- javascript - 如果选择了选择字段的选项,则在 jquery 中编写一个函数