Что ж, я прочитал много постов и учебных пособий по этой проблеме, но ни один из них не похож на мою ситуацию.
Я работаю в системе, где мне нужно опросить некоторую информацию и обработать свое приложение с помощью эта новая информация, я пытаюсь использовать componentDidUpdate для выполнения работы, но мне нужно устанавливать состояние при каждом полученном ответе, а затем мой код вводится в бесконечном l oop и браузер просто зависает ...
Но это не единственная проблема, когда мой запрос перехватывает значение diff путешествий (viagens), мне нужно моргнуть иконкой с красного на зеленый, а затем обратно на красный.
Я знаю о сокет-сервере, но У меня есть этот API, и я не могу использовать другую вещь, мне нужен выход из того, что у меня есть, я использую просто реагировать на интерфейс и не знаю, как решить эту проблему прямо сейчас.
Мой код запроса выглядит следующим образом:
polling(id_maquina){
fetch(`http://localhost:5000/Arduino/DadosEmpilhadeira?id_maquina=${id_maquina}`)
.then(res => res.json())
.then(json => this.setState({maquina: json}));
}
И это моя первая попытка решить эту проблему:
componentDidUpdate(prevProps, prevState){
const id_maquina = this.state.nome;
console.log("entrou no loop");
setInterval(() => {
fetch(`http://localhost:5000/Arduino/DadosEmpilhadeira?id_maquina=${id_maquina}`)
.then(res => res.json())
.then(json => this.setState({maquina: json}));
}, 10000);
if(prevState.maquina.viagens !== this.state.maquina.viagens){
setInterval(this.setState({cor: 'rgb(0,100,0)'}), 2000);
}
setTimeout(() => {
this.setState({cor: 'rgb(220,0,0)'});
}, 2000);
}
Я не эксперт с интерфейсом или JS вообще, но я чувствую, что мой setInterval ничего не делает, если я не могу остановить повторный запуск componentDidUpdate до первого конца.
[EDIT]
Моя фаза опроса начинается только после того, как я отправлю id_maquina значение, что означает, что я не знаю, смогу ли я поместить эту логику c в componentDidMount, потому что при первом монтировании я не смогу сделать выборку, которая выдаст ошибку 400 "машина не найдена" из моего API.