【发布时间】:2021-12-14 18:17:51
【问题描述】:
在 getData() 函数中,我正在控制台记录数据,以查看它在异步调用后是否正确设置为状态。它返回 Array[] 我猜这意味着数据集但 console.log 在获取完成之前正在运行。
useEffect 中的 console.log 可以正常工作,虽然它会记录两次。
有没有办法在 getData() 函数中使用 console.log 或者它是在 useEffect 中执行它的正确方法?
useEffect console.log 运行两次,因为我猜是在数据被检索并设置为状态后一次,然后在设置后,控制台在重新渲染后再次记录。
const TestComponent = () => {
// State for Data
const [data, setData] = useState([])
// URL for Data
const url = 'https://randomuser.me/api/?results=20'
// Retrieve Data - Function
const getData = async() => {
const { results } = await (await fetch(url)).json()
setData(results)
console.log(data)
}
useEffect(() => {
getData()
console.log(data)
},[])
return (JSX)
【问题讨论】:
-
最好的选择是停止使用
console.log()并使用实际的调试器 - 在浏览器或 IDE 中。 -
是的,请再次阅读反应生命周期,它们与钩子的关系,使用效果中的第二个参数以及什么时候运行 w.r.t。 componentDidMount 和 componentDidUpdate。还要了解为什么 JavaScript 是一种非阻塞事件驱动语言,本质上是学习事件循环。
标签: javascript reactjs async-await react-hooks