【发布时间】:2021-06-25 16:50:00
【问题描述】:
我正在尝试从我的 API 获取数据然后对其进行修改, 我试过这个:
const [reports, setReports] = useState([]);
const [workers, setWorkers] = useState([]);
const [newReports, setNewReports] = useState([]);
useEffect(() => {
(async () => {
await get_user_data().then((dataRes) => {
axios
.get('/api/reports/?my_business=' + dataRes.id)
.then((dataRes) => {
setReports(dataRes.data);
return dataRes.data[0].my_business;
})
.then((dataRes) => {
axios
.get('/api/workers/?my_business=' + dataRes)
.then((dataRes) => {
setWorkers(dataRes.data);
})
.then(() => {
setNewReports(fix_data());
});
});
});
})();
}, []);
我得到了 reports 和 workers,但是当我设置 newReports 时,我只会在第一次渲染中得到它们,如果我刷新我丢失新报告中的数据,这是因为 setNewReports(fix_data()) 不等待 reports 和 workers 被获取。
这是我的fix_data() 函数:
function fix_data() {
let w = {};
let r = {};
let rep = [];
reports.forEach((report) => (w[report.worker_id] = workers.find((worker) => worker.id === report.worker_id)));
reports.forEach(
(report) => (
(r = report), (r.worker_id = w[report.worker_id].first_name + ' ' + w[report.worker_id].last_name), rep.push(r)
),
);
return rep;
}
我的 useEffect 函数有什么问题?我确实在 then 内部调用了 setNewReports(fix_data()) 那么为什么它不等待获取数据呢? 谢谢
【问题讨论】:
标签: reactjs async-await axios use-effect