Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 州政府没有';不要改变反应_Javascript_Reactjs_Api_Fetch_Use State - Fatal编程技术网

Javascript 州政府没有';不要改变反应

Javascript 州政府没有';不要改变反应,javascript,reactjs,api,fetch,use-state,Javascript,Reactjs,Api,Fetch,Use State,我做了一个promise函数,从官方的nbaapi获取一个JSON文件。在这个函数中,我试图更新usestate。但是在设置状态之后,我一直得到一个空数组。我忽略了什么 const Games = () => { const [gameData, setGameData] = useState([]); const { readableDate } = useContext(NBAContext); const insertTime = readableDate.

我做了一个promise函数,从官方的nbaapi获取一个JSON文件。在这个函数中,我试图更新usestate。但是在设置状态之后,我一直得到一个空数组。我忽略了什么

const Games = () => {
    const [gameData, setGameData] = useState([]);
    const { readableDate } = useContext(NBAContext);

    const insertTime = readableDate.split('/');


        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 () => {
                        const response = await fetch(jsonSrc);
                        return await response.json()
                };

            getScores().then((result) => {
                console.log(result)
                setGameData(result);
                console.log(gameData);
            });

        }, [readableDate])

编辑:实际答案-设置状态,无论是使用
this.setState
还是
useState
挂钩,都是一个异步过程。这意味着在
setGameData(results)
之后调用
console.log(gameData)
将产生上一个结果(在本例中为空数组)。如果要访问带有API调用结果的
gameData
变量,请使用另一个
useffect
hook和
gameData
作为依赖项:

useEffect(() => {
  console.log(gameData)
}, [gameData])
初始答案,代码改进/建议:删除承诺中将代码包装在
getScores
中的行,然后返回
wait response.json()的结果


与setState一样,useState的设置也是异步的。这就是console.log(gameData)打印空数组的原因。因为它仍然是以前的数组


设置数据后,将使用更新的数据调用一个新的渲染,您可以显示它。

这一行是否返回一组数据:
const data=await response.json()
?将其包装在
return new Promise(async(resolve,reject)=>{}
。只需执行
return await response.json()
和在
getScores()中。然后((结果)=>{}
行调用
setGameData
。这可能不会解决您的问题,但应该会使debug@Alain是,这将返回一个与@TomOakley一致的数组。行
getScores()。然后((结果)=>{
应该给你期望的结果。@TomOakley我更改了它,但它仍然给我一个空数组
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])