【发布时间】:2021-10-02 19:38:31
【问题描述】:
我正在尝试通过数组映射来呈现帖子列表。我以前做过很多次,但出于某种原因
renderPosts = async () => {
try {
let res = await axios.get('/posts');
let posts = res.data;
return posts.map((post, i) => {
return (
<li key={i} className="list-group-item">{post.text}</li>
);
});
} catch (err) {
console.log(err);
}
}
render () {
return (
<div>
<ul className="list-group list-group-flush">
{this.renderPosts()}
</ul>
</div>
);
}
我得到的是:
未捕获的错误:对象作为 React 子项无效(找到:[object Promise])。如果您打算渲染一组子项,请改用数组。
我检查了从 renderPosts 返回的数据,它是一个具有正确值且没有任何承诺的数组。这是怎么回事?
【问题讨论】:
-
您只能从反应中返回 1 个对象。您需要将 return posts.map 更改为 const someVar = posts.map,然后返回
- {someVar}
-
虽然第一条评论是正确的,但更大的问题是你试图从一个不起作用的异步方法返回 JSX。您需要在
componentDidMount()中获取您的异步数据并在您的 api 返回而不是直接返回 JSX 时调用this.setState -
我以前用 componentWillMount 试过这个,因为我认为这是问题所在,但它没有用。只需使用 componentDidMount 就可以了!谢谢 azium。
标签: javascript reactjs