【发布时间】:2020-06-17 16:21:40
【问题描述】:
我需要使用来自 useContext 的数据来验证登录的用户是否是管理员。但它首先给出值“未定义”,然后在延迟 5 秒后给出实际值。 但是到那时,代码会中断,因为它不能与“未定义”一起使用。
import React, { useContext, useEffect } from 'react';
import { useHistory } from 'react-router-dom';
import { AuthContext } from '../../context/AuthContext';
const Admin = () => {
const history = useHistory();
const { userData } = useContext(AuthContext);
console.log(userData); // ****** This first gives {token: undefined, user: undefined}
/***************************** Then it gives the actual data after 5-10 seconds delay
* {token: "eyJhbGciOiJIUzI", user: {…}}
token: "eyJhbGciOiJIUzI"
user:
isAdmin: true
__v: 0
_id: "5eea03a736b70722c83a7b63"
*******************************************************************/
// I WANT TO FETCH "isAdmin" // so that I can work on further code
if (!userData.user.isAdmin) {
history.push("/");
};
return <h1>Admin Panel</h1>
};
我需要使用异步/等待吗?因为我尝试在自定义异步函数中执行此操作,但它引发了另一个错误,我们无法在非反应函数中使用 useContext。
【问题讨论】:
-
您在哪里进行抓取?我的意思是,5 秒后它来自哪里?
-
console.log(userData) 每次页面呈现时显示两次
-
也许您可以在页面尝试获取 auth 用户数据时说“正在加载”。 function getPage(userData){ if (!userData.user) { return
loading... .... } 并使用它作为回报,例如
return {getPage(userData)}
标签: javascript reactjs react-redux react-router