首页 > 解决方案 > 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));

除了它们与商店一起使用的方式之外,还有一些我尚未了解的好处还是纯粹的编码偏好?

谢谢

标签: javascriptangulartypescriptrxjsngrx

解决方案


从外面看,它们是一样的。不同之处在于(users: IUser[]) => users.filter(user => (user.active === true))函数的调用频率。作为createSelector创建记忆功能。

调用 createSelector 或 createFeatureSelector 返回的选择器函数最初的记忆值为 null。在第一次调用选择器后,它的记忆值存储在内存中。如果随后使用相同的参数调用选择器,它将返回记忆值。如果然后使用不同的参数调用选择器,它将重新计算并更新其记忆值

ngRx 文档


推荐阅读