所以我从 ngrx 商店检索数据的传统方法是:
public getUser(): Observable<IUser> {
return this.store.select(store => store.users.selectedUser);
}
但我正在尝试转换为使用 createSelecor (ngrx 15) 因此尝试:
public getUser(): Observable<IUser> {
const user = createSelector((state: IAppState) => state.users,
(userState) => {
return userState;
}
);
return user;
}
但出现以下错误:
TS2740: Type 'MemoizedSelector<IAppState, IUserState, (s1: IUserState) => IUserState>' is missing the following properties from type 'Observable<IUser>': source, operator, lift, subscribe, and 3 more.
所以我的问题是如何从
createSelecor
得到一个 Observable,这样我以后可以做:
this.storeSelector.getUser().subscribe((a) => {
console.log(a);
});
TypeScript 不满意:
Observable<IUser>
返回类型。
谢谢。
你的答案中的例子可能不会记忆,因为你每次都声明一个新的选择器。
你真的不需要
getUserMemoize
功能,因为它的主体很简单,你可以直接使用。
export const getUser = createSelector((state: IAppState) => state.users,
(userState) => userState.selectedUser
));
...
public getUserMemoize(){
return this.store.select(getUsers);
}
// Or use directly
const users$ = this.store.select(getUsers);
认为这是方式:
...
private selectorGetUsers$ = null;
...
/** Example3: createSelector avoid creating createSelector everytime for best memoization combines slices **/
getUserCombinesExample3(): Observable<IUser> {
if (!this.selectorGetUsers$) {
this.selectorGetUsers$ = createSelector((state: IAppState) => state.users,
(userState) => userState.selectedUser
);
}
return this.store.select(this.selectorGetUsers$);
}
评论?