Данные не могут быть назначены функции состояния в интервале в эффекте использования

#reactjs #react-hooks

Вопрос:

Я получаю данные из асинхронной функции axios и пытаюсь назначить состояние в той же функции. Когда я печатаю значения на консоли, я вижу, что временное значение не равно нулю, но состояние всегда равно нулю. когда я повторно открываю страницу, состояние не является нулевым.

     const [Pickup, setPickUp] = useState([]);


    async function GetOrders() {
      const result = await axios(
        `EXAMPLEURL`,
      );
      setOrders(result.data);

      var temp = [];
      result.data.allOrders.forEach(element => {
        if (element.order_type === 'PickupOrders') {
          temp.push(element);
        }
      });
      console.log(temp);

      if (Pickup !== temp) {
        setPickUp(temp);
      }

    }

    useEffect(() => {
      GetOrders();

      const interval = setInterval(() => {
        GetOrders();
        console.log(Pickup);
      }, 1000 * 5);

      return () => clearInterval(interval)
    }, []);
 

На консоли:

консоль.журнал

Как я могу решить эту проблему?

Ответ №1:

Я предполагаю, что вы хотите сделать запрос на получение. Ваша функция axios должна быть завершена, например ;

 await axios
    .get("YOUR URL", {
      headers: // if you need to add header,
    })
    .then((response) =>{
     setOrders(reponse.data);
    })
    .catch((error) => {
      result = { errorMessage: error.message };
      console.error('There was an error!', error);
    });
  return resu<
 

Ответ №2:

Не совсем уверен, чего вы пытаетесь достичь, но вы не можете сравнивать Pickup !== temp это будет ложным все время, вы сравниваете ссылки на объекты. Js будет возвращать все время, когда эти значения не равны.

Эта функция GetOrders возвращает обещание, вам не нужно использовать интервал, вы можете использовать GetOrders.затем(lambdaFunctionHere -> ());