在 React 中,如何进行单个 api 调用、将结果设置为状态变量并显示它?
In React, how can I make a single api call, set the result to a state variable, and display it?
我正在编写一个 React 应用程序,我需要在其中进行单个异步 api 调用,将结果保存到状态变量并显示结果。我正在使用一个 axios 实例,其中 api 调用的响应是一个嵌套对象。例如:
{
kanji:
{character: "", stroke:""},
quote: "string"
}
到目前为止,我有以下代码可以成功 console.log homeData 对象。但是我收到错误消息:'TypeError: homeData is undefined'.
const Home = () =>{
const [homeData, setHomeData] = useState({})
const getHomeData = async()=>{
instance.get("/data")
.then(res =>{
setHomeData(res.data)
})
.catch(error =>{
console.log(error)
})
}
useEffect(()=>{
getHomeData()
}, [])
console.log(homeData)
return(
<>
<p>{homeData}<p>
</>
)
}
这似乎是一个承诺问题,但我不确定如何解决它。提前感谢您的帮助。
这不是承诺问题,它必须与生命周期方法的顺序有关运行。 useEffect 在组件渲染后 运行s。这意味着当组件首次呈现时,homeData 是一个空对象。 homeData 将出现在第二个渲染中。以下代码首先检查 homeData 是否存在,如果存在,则显示汉字字符。另请注意,您不能只将原始对象显示到 dom 中,因此您必须通过 属性 访问 homeData 才能显示
const Home = () =>{
const [homeData, setHomeData] = useState({})
const getHomeData = async()=>{
instance.get("/data")
.then(res =>{
setHomeData(res.data)
})
.catch(error =>{
console.log(error)
})
}
useEffect(()=>{
getHomeData()
}, [])
console.log(homeData)
return(
<>
<p>{homeData && homeData.kanji.character}<p>
</>
)
}
我正在编写一个 React 应用程序,我需要在其中进行单个异步 api 调用,将结果保存到状态变量并显示结果。我正在使用一个 axios 实例,其中 api 调用的响应是一个嵌套对象。例如:
{
kanji:
{character: "", stroke:""},
quote: "string"
}
到目前为止,我有以下代码可以成功 console.log homeData 对象。但是我收到错误消息:'TypeError: homeData is undefined'.
const Home = () =>{
const [homeData, setHomeData] = useState({})
const getHomeData = async()=>{
instance.get("/data")
.then(res =>{
setHomeData(res.data)
})
.catch(error =>{
console.log(error)
})
}
useEffect(()=>{
getHomeData()
}, [])
console.log(homeData)
return(
<>
<p>{homeData}<p>
</>
)
}
这似乎是一个承诺问题,但我不确定如何解决它。提前感谢您的帮助。
这不是承诺问题,它必须与生命周期方法的顺序有关运行。 useEffect 在组件渲染后 运行s。这意味着当组件首次呈现时,homeData 是一个空对象。 homeData 将出现在第二个渲染中。以下代码首先检查 homeData 是否存在,如果存在,则显示汉字字符。另请注意,您不能只将原始对象显示到 dom 中,因此您必须通过 属性 访问 homeData 才能显示
const Home = () =>{
const [homeData, setHomeData] = useState({})
const getHomeData = async()=>{
instance.get("/data")
.then(res =>{
setHomeData(res.data)
})
.catch(error =>{
console.log(error)
})
}
useEffect(()=>{
getHomeData()
}, [])
console.log(homeData)
return(
<>
<p>{homeData && homeData.kanji.character}<p>
</>
)
}