我正在尝试使用axios获取数据。下面的代码可以正常工作:
componentDidMount(){
const posts = axios.get("https://jsonplaceholder.typicode.com/posts");
console.log(posts);
}
但这不是
async componentDidMount(){
const data = await axios.get("https://jsonplaceholder.typicode.com/posts");
console.log(data)
}
你知道为什么不管用吗?
3条答案
按热度按时间i34xakig1#
在
componentDidMount
中没有什么特殊的东西可以阻止它异步。这个特殊的问题看起来像是Axios的问题。使用fetch
很容易检查:fsi0uk1n2#
当你说“这段代码可以工作”时,你指的是什么并不十分清楚:控制台中的输出不会是您的帖子列表,对吗?
但是你不需要使用
async
/await
,它们只是语法上的糖衣,调用axios.get
同步返回的值是Promise
,所以你也可以使用then
和catch
:这样,您就不需要在react中支持
async
/await
,这似乎是正确设置的一件大事,正如本文所述:https://www.valentinog.com/blog/await-react/注意组件无论如何都会render
,因为它不知道你还在等待数据加载,所以当数据加载并且你更新了状态时,它需要再次呈现。h7appiyu3#
你的两个片段都运行良好。
你的密码,
这里
console.log(posts)
将只返回Promise
,而不是实际数据。并且使用
async
/await
,同样在这里,
console.log(posts)
-将返回Promise
对象,而不是实际数据console.log(posts.data)
-这将返回实际数据数组console.log(JSON.stringify(posts.data))
-这将返回实际数据的stringified
版本console.log(JSON.stringify(posts.data[0]))
-这将返回实际数据中第一条记录的stringified
版本。Demo