javascript - Ngrx 选择器:createSelector VS 纯 rxjs
问题描述
嗨伟大的互联网头脑,
我正在尝试了解 ngrx 选择器的高级用途并正在消化这篇文章:ngrx 选择器
有一些例子展示了 createSelctors 和一些纯 rxjs 魔法。使用一个对另一个有什么好处。感兴趣的方法是getAllActiveUsersNGRX VS getAllActiveUsersRXJS。
样本
const selectUserStore = (state: GlobalState) => state.userStore;
const getAllUsers = createSelector(
selectUserStore ,
(state: UserState) => state.allUsers
);
const getAllActiveUsersNGRX = createSelector(
getAllUsers,
(users: IUser[]) => users.filter(user => (user.active === true))
);
const getAllActiveUsersRXJS = pipe(
select(getAllUsers),
map((users: IUser[]) => users.filter(user=> (user.active === true)))
);
我知道在商店中使用它们也会有所不同
例如
store.pipe(select(getAllActiveUsersNGRX));
VS
store.pipe(select(getAllActiveUsersRXJS));
除了它们与商店一起使用的方式之外,还有一些我尚未了解的好处还是纯粹的编码偏好?
谢谢
解决方案
从外面看,它们是一样的。不同之处在于(users: IUser[]) => users.filter(user => (user.active === true))
函数的调用频率。作为createSelector
创建记忆功能。
调用 createSelector 或 createFeatureSelector 返回的选择器函数最初的记忆值为 null。在第一次调用选择器后,它的记忆值存储在内存中。如果随后使用相同的参数调用选择器,它将返回记忆值。如果然后使用不同的参数调用选择器,它将重新计算并更新其记忆值
推荐阅读
- mysql - 从文本 MySql 中提取 OrderID
- ruby-on-rails - 使用 ruby on rails 将图像信息保存到数据库并将图像保存到非(云服务器或使用 aws SDK)的最佳 gem 或方法是什么
- image - 在 Google 文档中插入图片
- jquery - ActiveRecord::RecordNotFound(找不到带有 'id'=undefined 的博客):
- java - 我可以在公共类中声明 Scanner 吗?
- typescript - 如何分两部分创建重用方法?(打字稿,谷歌地图)
- python - 如何使用带有通配符的python打开目录中的多个文件
- java - 使 Alpine 在 ARM64 架构上执行非 musl Java JRE
- text - 在谷歌视觉 OCR 中被识别为单个单词的特殊字符?
- javascript - 解析字符串以获取数组详细信息