【发布时间】:2020-01-17 04:32:15
【问题描述】:
我有一个从本地存储读取令牌并从令牌中解码用户声明的钩子。
export const useActiveUser = (): { user: IUserTokenClaims | null } => {
const [user, setUser] = useState<IUserTokenClaims | null>(null);
useEffect(() => {
const token = localStorage.getItem("token");
if (!token) setUser(null);
else {
const claims = jwt.decode(token) as IUserTokenClaims;
if (!claims.id || !claims.displayName || !claims.role) setUser(null);
else {
setUser({
id: claims.id,
displayName: claims.displayName,
role: claims.role
});
}
}
}, []);
return { user };
};
如果我在这样的组件中使用钩子......
export const SomeComponent: React.FC = () => {
const { user } = useActiveUser();
console.log(user)
if (user) {/* Render stuff if user is logged in */}
else {/* Render stuff if user is not logged in */}
}
日志语句将打印null,并在第二次渲染时注销用户声明。
为什么会渲染两次?
【问题讨论】:
标签: reactjs typescript jwt