【发布时间】:2021-10-12 00:13:06
【问题描述】:
我尝试从后端获取数据并在前端显示该数据。这是我为完成这项任务而编写的代码。
function ViewPost() {
const { id } = useParams();
console.log(id);
const [posts, setPosts] = useState({});
useEffect(()=>{
getOnePost();
}, []);
useEffect(()=>{
if (posts && posts.location) {
console.log(posts.location);
console.log(posts.location.longitude);
console.log(posts.location.latitude);
}
}, [posts]);
const getOnePost = async () => {
try {
const response = await axios.get(`/buyerGetOnePost/${id}`)
console.log(response);
const allPost=response.data.onePost;
setPosts(allPost);
} catch (error) {
console.error(`Error: ${error}`)
}
}
console.log(posts);
console.log(posts.wasteItemList);
return(
<div className="posts-b">
<div className="posts__container-b">
<h1>Post Details</h1>
<main className="grid-b">
{posts.wasteItemList.map((notes,index)=>(
<article>
<div className="text-b">
<h3>Post ID: {index+1}</h3>
<p>Waste Item: Polythene Roll</p>
<p>Quantity: 1 kg</p>
</div>
</article>
))}
</main>
</div>
</div>
);
}
export default ViewPost;
当我使用 console.log(posts) 时,它会成功显示发布数据。 wasteItemList 是一个数组,它有两个对象。
当我 console.log(posts.wasteItemList) 它也成功地显示了两个对象数组。
但是当我尝试映射wasteItemList 时问题就来了。我尝试使用 thisposts.wasteItemList.map 进行映射。但我收到错误“TypeError:无法读取未定义的属性“地图”。我该如何解决这个问题?
【问题讨论】:
-
在尝试使用
.map()之前检查posts.wasteItemList是否已定义。当您的组件最初安装和渲染时,posts是一个没有wasteitemList属性的空对象(由您的初始状态{}定义)。所以尝试在上面使用.map()会抛出错误
标签: reactjs