Ошибка типа: уничтожение не является функцией в Reactjs при вызове функции api async в хуке useEffect


const [dailyData, setDailyData] = useState([]);
 useEffect(async () => {
    const fetchData =  await fetchDailyData();  // fetchDailyData() is calling Api 
    setDailyData(fetchData); 

    console.log(fetchData); //fetchData print the value but dailyData not updating


  },[]);

показывая, что уничтожение не является функцией, а func.apply не является функцией


person Naveen kumar    schedule 31.05.2020    source источник
comment
fetchData печатает значение, но dailyData не обновляется setDailyData будет обновлять состояние асинхронно, вы не можете регистрировать dailyData сразу после вызова setDailyData   -  person Yousaf    schedule 31.05.2020
comment
вы можете поделиться fetchDailyData?   -  person Bahtiyar    schedule 31.05.2020


Ответы (1)


Обратные вызовы обработчиков эффектов не могут быть асинхронными. Вместо этого объявите асинхронную функцию с областью действия обратного вызова, а затем вызовите ее. Кроме того, как указано @ StéphaneVeyret, обратный вызов обработчика эффекта «async» неявно возвращает Promise, который интерпретируется как функция очистки обработчика эффекта. Это не, хотя и вызывает ошибку.

useEffect(() => {
  const asyncFetchDailyData = async () => {
    const fetchData = await fetchDailyData(); // fetchDailyData() is calling Api 
    setDailyData(fetchData);
    console.log(fetchData);
  }

  asyncFetchDailyData();
}, []);
person Drew Reese    schedule 31.05.2020
comment
Просто чтобы добавить информацию: асинхронная функция всегда будет возвращать результат как Promise. При вызове useEffect response ожидает, что результатом функции, если таковая имеется, будет функция, которая будет вызываться для «очистки» эффекта. Итак, ошибка. - person Stéphane Veyret; 31.05.2020
comment
Спасибо! У меня был асинхронный useEffect в next.js, и сообщение об ошибке показывалось в несвязанном месте, вы сэкономили мне несколько часов. - person Evgeny; 15.01.2021