I'm trying to get data from my API then modifying it, I tried this:
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());
});
});
});
})();
}, []);
I got the reports and the workers, but when I set newReports I only get them in the first render, if I refresh I lose the data in new reports, that's because setNewReports(fix_data()) don't wait for the reports and the workers to be fetched.
Here's my fix_data() function:
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;
}
What's wrong with my useEffect function? I do call setNewReports(fix_data()) inside then so why it doesn't wait for the data to be fetched? Thank you