`useeffect`无法在组件上获取数据
我试图将一系列对象设置为dineins
在使用使用效果之后。我了解的是,接收数据会有某种延迟,因为在获取数据后,状态变量在登录时会返回一个空数组。
import axios from 'axios';
import React, { useEffect, useState } from 'react';
import { useNavigate } from 'react-router';
import jwtDecode from 'jwt-decode';
function CheckIns() {
const [dineIns, setDineIns] = useState([]);
const navigate = useNavigate();
useEffect(() => {
const token = localStorage.getItem('token');
if (token) {
const user = jwtDecode(token);
if (!user) {
localStorage.removeItem('token');
navigate('/login');
} else {
async function UserData(user_email) {
const user_data = await axios
.get(`/api/users/${user_email}`)
.then((res) => {
const info = res.data.reservations;
setDineIns(info);
console.log(dineIns);
});
}
UserData(user.email);
}
} else {
navigate('/login');
}
}, []);
}
在这里需要纠正什么才能及时设置状态?
I am trying to set an array of objects into dineIns
after fetching them inside useEffect. What I understood is that there is some kind of delay in receiving the data because the state variable returns an empty array when I log it after fetching the data.
import axios from 'axios';
import React, { useEffect, useState } from 'react';
import { useNavigate } from 'react-router';
import jwtDecode from 'jwt-decode';
function CheckIns() {
const [dineIns, setDineIns] = useState([]);
const navigate = useNavigate();
useEffect(() => {
const token = localStorage.getItem('token');
if (token) {
const user = jwtDecode(token);
if (!user) {
localStorage.removeItem('token');
navigate('/login');
} else {
async function UserData(user_email) {
const user_data = await axios
.get(`/api/users/${user_email}`)
.then((res) => {
const info = res.data.reservations;
setDineIns(info);
console.log(dineIns);
});
}
UserData(user.email);
}
} else {
navigate('/login');
}
}, []);
}
What needs to be corrected here to set the state in time?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
SET状态是一个异步操作,它将在设置后记录数据,将记录旧值。
为了确保正确的数据集正确,您可以再次使用SetState,
也可以使用
Dineins
依赖性使用效果。我认为您的代码效果很好。
set state is an async operation, which log the data after set it, will log the old value.
To ensure that the data set correctly, you can use setState again
Or you can use effect with
dineIns
dependence.I think your code works fine.
您期望从
axios
调用Promise
,但您是等待
in。尝试这样更改您的代码:
You are expecting a
Promise
from theaxios
call but you areawait
ing it.Try to change your code like this: