Piszę tracker kryptowalut, zatrzymałam się w miejscu, gdzie użytkownik decyduje się przełączyć na inną kryptowalutę.
Najpierw najmniej ważna część, tylko dla porządku:
async function getCurrentPrice(success, failure,data){
const [cryptoID, referenceCoin, text] = data;
const resp = await Axios.get(link.currentPrice(cryptoID, referenceCoin), link.header).catch((error=>{failure(error, cryptoID)}));
try{
const data = [Object.keys(resp.data)[0], Object.values(resp.data)[0] ];
success(data);
}
catch(error){failure(error, cryptoID)};
}
Ogólnie, pobrane dane są wysyłane do reducera, błędy też idą do reducera.
function getCurrentPrices (success, failure, x) {
clearInterval(Loop);
const Loop = () => {
getCurrentPrice(success, failure, x)
}
let repeater = window.setInterval(Loop, 5000);
}
To jest pętla, która zapewnia powtarzalność operacji
useEffect(()=>{
if (searchInput && searchInput.length) {
getCurrentPrices(send_current, current_bad_data, searchInput/*[...searchInput]*/);
}
},[searchInput]);
A to fragment komponentu gdzie wsztystko jest zamknięt w useEffect. SearchInput to fragment stanu, który przecgowuje mi.in aktualną kryptowalutę.
I wszytko byłoby elegnacko, gdyby nie fakt, że po zmianie wybranej kryptowaluty do reducera lecą dane z nowej i starej krypto. Zrobiłam kilka różnych prób ale nic to nie zmienilo - deklarowałam Looop poza pętlą, przenosiłam clearInterval - bez efektu. Sprawa pewnie jest banalna ale nie mam pomysłu a gapię się na to na tyle długo, że tracę dystans. Może ktoś ma jakąś sugestię?