You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tailchat/shared/redux/hooks/useUserInfo.ts

30 lines
753 B
TypeScript

import { getCachedUserInfo } from '../../cache/cache';
import { useAsync } from '../../hooks/useAsync';
import type { UserLoginInfo } from '../../model/user';
import { useAppSelector } from './useAppSelector';
/**
* 获取当前用户基本信息
*/
export function useUserInfo(): UserLoginInfo | null {
return useAppSelector((state) => state.user.info);
}
/**
* 用户基本Id
*/
export function useUserId(): string | undefined {
return useUserInfo()?._id;
}
/**
* 根据用户id获取用户信息列表
*/
export function useUserInfoList(userIds: string[]) {
const { value: userInfos = [] } = useAsync(() => {
return Promise.all(userIds.map((userId) => getCachedUserInfo(userId)));
}, [userIds.join(',')]);
return userInfos;
}