Ngrx选择器:createSelector VS纯rxjs

时间:2018-06-05 18:12:55

标签: javascript angular typescript rxjs ngrx

嗨,伟大的网络思想,

我试图了解ngrx选择器的高级用法并努力消化这篇文章:ngrx selectors

有些例子显示了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)))
);

我知道在商店使用它们也会有所不同

E.g

store.pipe(select(getAllActiveUsersNGRX));

VS

store.pipe(select(getAllActiveUsersRXJS));

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

由于

1 个答案:

答案 0 :(得分:1)

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

  

通过调用createSelector或返回的选择器函数   createFeatureSelector最初的记忆值为null。之后   选择器在第一次存储其记忆值时被调用   记忆。如果选择器随后被相同的调用   参数将返回备注值。如果选择器是   用不同的参数调用它将重新计算并更新其   记忆值

ngRx docs