`const [items, setItems] = useState([]);
const handleOnFetchData = useCallback((data) => {
setItems(
data.results.filter(
(report) => report.status === 1 || report.status === 2
)
);
}, []);`
How I do:
`let interval;
useEffect(() => {
if (items.length > 0) {
items.forEach((report, i) => {
interval = setInterval(() => {
monitoringItem(report.record_id);
}, 5000);
});
} else {
clearInterval(interval);
}
}, [items]);`
the monitoringItem function sends a request every 5 seconds and checks the status of the item. if the status is anything other than 1 or 2, then stop the interval and remove that item from the state.
const monitoringItem = useCallback(
async (id) => {
const response = await API.get(`/reports/${id}`);
const monitoredReport = response.data.results[0];
if (monitoredReport.status !== 2 && monitoredReport.status !== 1) {
clearInterval(interval);
setItems(
items.filter((rep) => rep.record_id !== monitoredReport.record_id)
);
}
},
[items]
);
Question and problem: How can I hang my own setInterval for each item when adding. Now everything is fine with 1 item. but adding others breaks everything.