返回当前处于承诺状态的值
Returning a value which is currently in promised state
所以这更像是一个 javascript 问题而不是 reactjs 问题。我在 reactjs 中创建一个受保护的路由。在此,我正在获取 '/checkauth' get 请求以检查身份验证,它正确地 returns 对我的响应。然而问题在于,由于它是一个异步函数,因此 return 该值需要时间,因此我的 return 语句会更早执行。
这是我遇到问题的代码。
const [auth, setAuth] = useState();
const checkAuthentication = async ()=>{
const res = await fetch('/checkauth', {
method : "GET",
credentials: "include",
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
}
});
const data = await res.json();
return res.status===200 ? (data.isAuthenticated) : (false) ;
}
useEffect(async ()=>{
const data = await checkAuthentication();
setAuth(data)
}, []);
return auth ? <Outlet /> : <Navigate to='/signin' />;
这里的 auth 总是未定义的,因此它总是导航到签名。
使用三种状态。
const [auth, setAuth] = useState("loading");
...
setAuth(data ? "auth" : "not-auth");
...
if (auth === "loading")
return <Loading />
else if (auth === "not-auth")
return <Navigate to='/signin' />
else
return <Outlet />
您可以在获取数据时 return 加载微调器,当请求完成时,状态将更新并呈现 <Outlet />
组件。
顺便说一句:当您将异步函数传递给 useEffect 挂钩时,它 return 是一个 promise,useEffect 不期望 return Promis 的回调函数e,它期望回调 return 什么都没有(未定义)或函数(通常是清理函数)。
试试这个:
useEffect(() => {
// declare the async data fetching function
const fetchData = async () => {
// get the data from the api
const data = await fetch('https://yourapi.com');
// convert the data to json
const json = await response.json();
// set state with the result
setData(json);
}
// call the function
fetchData()
// make sure to catch any error
.catch(console.error);;
}, [])
- 更多信息:
所以这更像是一个 javascript 问题而不是 reactjs 问题。我在 reactjs 中创建一个受保护的路由。在此,我正在获取 '/checkauth' get 请求以检查身份验证,它正确地 returns 对我的响应。然而问题在于,由于它是一个异步函数,因此 return 该值需要时间,因此我的 return 语句会更早执行。 这是我遇到问题的代码。
const [auth, setAuth] = useState();
const checkAuthentication = async ()=>{
const res = await fetch('/checkauth', {
method : "GET",
credentials: "include",
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
}
});
const data = await res.json();
return res.status===200 ? (data.isAuthenticated) : (false) ;
}
useEffect(async ()=>{
const data = await checkAuthentication();
setAuth(data)
}, []);
return auth ? <Outlet /> : <Navigate to='/signin' />;
这里的 auth 总是未定义的,因此它总是导航到签名。
使用三种状态。
const [auth, setAuth] = useState("loading");
...
setAuth(data ? "auth" : "not-auth");
...
if (auth === "loading")
return <Loading />
else if (auth === "not-auth")
return <Navigate to='/signin' />
else
return <Outlet />
您可以在获取数据时 return 加载微调器,当请求完成时,状态将更新并呈现 <Outlet />
组件。
顺便说一句:当您将异步函数传递给 useEffect 挂钩时,它 return 是一个 promise,useEffect 不期望 return Promis 的回调函数e,它期望回调 return 什么都没有(未定义)或函数(通常是清理函数)。
试试这个:
useEffect(() => {
// declare the async data fetching function
const fetchData = async () => {
// get the data from the api
const data = await fetch('https://yourapi.com');
// convert the data to json
const json = await response.json();
// set state with the result
setData(json);
}
// call the function
fetchData()
// make sure to catch any error
.catch(console.error);;
}, [])
- 更多信息: