Опрос API с помощью React и установка состояния сразу после этого опроса - PullRequest
0 голосов
/ 21 апреля 2020

Что ж, я прочитал много постов и учебных пособий по этой проблеме, но ни один из них не похож на мою ситуацию.

Я работаю в системе, где мне нужно опросить некоторую информацию и обработать свое приложение с помощью эта новая информация, я пытаюсь использовать 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.

...