edit: фактический ответ - состояние установки с помощью this.setState
или useState
hook является асинхронным процессом. Это означает, что вызов console.log(gameData)
сразу после setGameData(results)
приведет к предыдущему результату (в данном случае пустому массиву). Если вы хотите получить доступ к переменной gameData
с результатами вызова API, используйте другой хук useEffect
с gameData
в качестве зависимости:
useEffect(() => {
console.log(gameData)
}, [gameData])
первоначальный ответ, улучшение кода / совет: удалите строку где вы заключаете код внутри getScores
в обещание и просто возвращаете результат await response.json()
.
useEffect(() => {
const jsonSrc = `https://cors-anywhere.herokuapp.com/http://data.nba.net/10s/prod/v1/${insertTime[2]}${insertTime[1]}${insertTime[0]}/scoreboard.json`;
const getScores = async () => {
try {
const response = await fetch(jsonSrc);
return await response.json()
} catch (err) {
console.log(err)
throw err
}
}
getScores().then((result) => {
console.log(result)
setGameData(result.games);
});
}, [readableDate])