Правильно ли так менять состояние асинхронно?

У меня код запрашивает данные с API. Я пытаюсь изменить состояние с помощью react hooks и useEffect()
Проблема в том что он повторяет запрос на сервер постоянно не переставая. Мой. API key уже забанили

let [weatherData, setWeatherData] = useState({})

    let fetchWeatherData = async() => {
        let url = `https://api.openweathermap.org/data/2.5/forecast?q=Chicago&APPID=${process.env.APIKey}&cnt=5`
        let response = await fetch(url);
        let data = await response.json()
        await setWeatherData(data)
    }

    useEffect(()=>{
        fetchWeatherData()
    })
  • Вопрос задан
  • 134 просмотра
Решения вопроса 1
@dpws
Если вы хотите запустить эффект только один раз (при монтировании), вы можете передать пустой массив [] в качестве второго аргумента.

let [weatherData, setWeatherData] = useState({})

    let fetchWeatherData = async() => {
        let url = `https://api.openweathermap.org/data/2.5/forecast?q=Chicago&APPID=${process.env.APIKey}&cnt=5`
        let response = await fetch(url);
        let data = await response.json()
        await setWeatherData(data)
    }

    useEffect(()=>{
        fetchWeatherData()
    }, [])


Документация
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы