我尝试从后端获取数据并在前端查看该数据。为此,我尝试了此代码。
function PostsLocation() {
const { offerId } = useParams();
console.log(offerId);
const [posts, setPosts] = useState({});
const [offerPosts, setOfferPosts] = useState({});
useEffect(()=>{
getOnePost();
}, []);
const getOnePost = async () => {
try {
const response = await axios.get(`/buyerGetOneSellerOffer/${offerId}`)
console.log(response);
const allPost=response.data.oneOffer;
setPosts(allPost);
} catch (error) {
console.error(`Error: ${error}`)
}
}
console.log(posts);
const PostId2=posts.postId
console.log(PostId2);
const type=typeof (PostId2);
console.log(type);
useEffect(()=>{
getOneOfferPost();
}, []);
useEffect(()=>{
if (offerPosts && offerPosts.location) {
console.log(offerPosts.location);
console.log(offerPosts.location.longitude);
console.log(offerPosts.location.latitude);
}
}, [offerPosts]);
const getOneOfferPost = async () => {
try {
const response = await axios.get(`/buyerGetOnePost/${PostId2}`)
console.log(response);
const allOfferPost=response.data.onePost;
setOfferPosts(allOfferPost);
} catch (error) {
console.error(`Error: ${error}`)
}
}
console.log(offerPosts);
const long = offerPosts?.location?.longitude;
console.log(long);
const lat=offerPosts?.location?.latitude;
console.log(lat);
const location={lat,long};
}
在这段代码中,我调用了第一个 API 并成功获取了数据。这张图片显示了我从这段console.log(posts)
代码中得到的数据。
然后我尝试将此posts.postId
ID 获取到此变量const PostId2
,我成功获取了此 ID。这张图片显示了我得到的 ID。
然后我尝试将此PostId2
ID传递给第二个 API,但 API 调用不起作用。然后我尝试const {PostId2}=posts.postId
像这样重构ID 。然后我再次尝试调用第二个 API,但我收到一条错误消息,显示“类型错误:无法解构 'posts.postId' 的属性 'PostId2',因为它未定义”。我应该如何解决这个问题?
PostId2
由于在第一个 useEffect 中发生的 API 调用,您的变量被填充。由于 API 调用是异步的,并且数据在初始渲染时不可用,因此对getOneOfferPost
useEffect的调用不会获得更新的 id。
解构也失败,因为该值最初不可用。
为了解决这个问题,添加 PostId2 作为useEffect
调用的依赖项,getOneOfferPost
并在 API 调用之前添加条件检查
const getOneOfferPost = async () => {
if(PostId2 !== undefined) {
try {
const response = await axios.get(`/buyerGetOnePost/${PostId2}`)
console.log(response);
const allOfferPost=response.data.onePost;
setOfferPosts(allOfferPost);
} catch (error) {
console.error(`Error: ${error}`)
}
}
}
const PostId2=posts.postId
useEffect(()=>{
getOneOfferPost();
}, [PostId2]);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句