1 回答
TA贡献1111条经验 获得超0个赞
你做的一切都是正确的。当您登录“第二个 Console.log”时,该值尚未分配给您的变量,因为您将其设置在异步函数内部。如果您在代码中的任何位置使用此变量,只需在访问其中的属性之前检查它是否已设置。
Edit1:不确定是否是这种情况,以及您得到什么样的响应,但也许尝试将其转换为 json,看看它是否有所作为。
const response = await api.get(`/service`);
const data = await response.json();
Edit2:我想我明白发生了什么:) 当您第二次登录对象时,它尚未设置,因此当您尝试访问该值时 - 您会收到错误消息。您在登录对象本身时看到它的原因是因为您打印了对该对象的引用,因此如果它在几毫秒后被分配,它仍然会被打印。
如果您第二次在没有参考的情况下打印它,很可能它仍然是空的,请尝试: console.log("second Console.log ", Object.assign({}, allServices))
Edit3 要查看您是否正在设置值,请尝试执行以下操作,看看您是否能够使用它
const Dashboard = () => {
const [allServices, setAllServices] = useState();
useEffect(() => {
onLoadSerivces();
}, []);
const onLoadSerivces = async () => {
try {
const { data } = await api.get('/service');
const result = response.data.data;
console.log('first log ', result[0]);
setAllServices(result);
} catch (err) {
const error = JSON.stringify(err.message);
alert(error);
}
};
// assume this will be an array
render() {
return allServices && allServices.map(service => {
console.log('Second log ', service);
return <div>{service.status}</div>;
});
}
};
添加回答
举报