【发布时间】:2021-08-30 11:19:00
【问题描述】:
我在尝试映射数组时出错(代码如下)。我收到的错误是: Uncaught (in promise) TypeError: posts.map is not a function。 我将它与我的一个旧项目进行了比较,它在旧项目上运行良好。提前致谢
const MainContent = () => {
const openModal = () => {
const modal = document.querySelector(".modal");
modal.style.display = "block";
};
const [posts, setPosts] = useState([]);
const getPosts = async () => {
const response = await fetch('http://localhost:5000/api/post/');
const posts = await response.json();
setPosts(posts);
console.log(posts)
}
useEffect(() => {
getPosts();
}, []);
return (
<section className="main-content-section">
<button className="button post-btn" onClick={openModal}>
Créer un nouveau post
</button>
<ModalPost style={{ display: "none" }} />
<div className="post-container">
{posts.map((post) => {
const { id, title, content, author } = post;
return (
<div className="post-content" key={id}>
<div className="post-content__user-info">
<div className="post-content__photo-container">
</div>
<div className="post-content__name">
<h3>{author}</h3>
</div>
</div>
<div className="post-content__content">
<h3>{title}</h3>
<p>{content}</p>
</div>
<div className="post-content__like-box">
<BiHeart className="like-heart like" size={26} />
<RiDislikeLine className="dislike-heart dislike" size={26} />
</div>
</div>
);
})}
</div>
</section>
);
};
【问题讨论】:
-
尝试在你的 useEffect 钩子中定义你的 getPosts 函数。另外,在设置帖子之前记录帖子的价值。
-
“posts”是一个数组吗?我们看不到响应。
-
重要的是要注意,当您执行 console.log(posts) 时,您指的是内部帖子变量(const)而不是状态变量
-
在映射
post数组之前添加if语句。原因是posts数组没有立即获取数据导致map函数失败。if条件将等到帖子数组实际包含数据 ` { (posts && posts.length > 0) ? posts.map((post) => {} : (loading...
) } `
标签: javascript reactjs dictionary