获取错误无法解构属性,因为它是未定义的

哈沙纳

我尝试从后端获取数据并在前端查看该数据。为此,我尝试了此代码。

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)代码中得到的数据

从第一个 API 获取数据

然后我尝试将此posts.postIdID 获取到此变量const PostId2,我成功获取了此 ID。这张图片显示了我得到的 ID。

身份证图片

然后我尝试将此PostId2ID传递给第二个 API,但 API 调用不起作用。然后我尝试const {PostId2}=posts.postId像这样重构ID 然后我再次尝试调用第二个 API,但我收到一条错误消息,显示“类型错误:无法解构 'posts.postId' 的属性 'PostId2',因为它未定义”。我应该如何解决这个问题?

舒巴姆·哈特里

PostId2由于在第一个 useEffect 中发生的 API 调用,您的变量被填充。由于 API 调用是异步的,并且数据在初始渲染时不可用,因此对getOneOfferPostuseEffect的调用不会获得更新的 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

TypeError:无法解构“ req.body”的属性“ userId”,因为它未定义

设置状态返回返回未定义,无法解构属性“标题”的“未定义”,因为它未定义

TypeError:无法解构“ this.props”的属性“凭证”,因为它未定义

电子JS-无法解构'require(...)。remote'的'BrowserWindow'属性,因为未定义

类组件抛出错误'TypeError:无法解构'this.State'的属性'timerTime',因为它是未定义的'

×TypeError:无法解构“ Object(...)(...)”的属性“ xxx”,因为未定义

无法解构“ this.props.data”的属性“聊天”,因为它未定义

TypeError:无法解构“ productDetails”的属性“ product”,因为未定义

未处理的拒绝(TypeError):无法解构“ Object(...)(...)”的属性“ setUser”,因为未定义

无法解构“未定义”的属性“历史”,因为它未定义。--React.js

Next.js useContext TypeError:无法解构'Object(...)(...)',因为它是未定义的

TypeError:无法解构“ item”的属性“ name”,因为它未定义

无法解构“(中间值)”的属性“数据”,因为它未定义

无法解构“未定义”的属性“纬度”

React CRUD 应用程序中的错误:TypeError:无法解构“this.props.event”的属性“id”,因为它未定义

类型错误:无法解构“cart”的属性“cartItems”,因为它未定义

无法从上下文中解构对象的属性,因为它是未定义的

MERN - 类型错误:无法解构“req.body”的属性“username”,因为它未定义

类型错误:无法解构“Object(...)(...)”的属性“toDos”,因为它未定义

运行测试时,TypeError: 无法解构属性 'travelDatas' of '(0 , _GetTravelDatas.getTravelDatas)(...)' 因为它是未定义的

类型错误:无法解构 '(0 , react_redux__WEBPACK_IMPORTED_MODULE_3__.useSelector)(...)' 的属性 'count',因为它未定义

React js无法解构属性,因为它未定义

类型错误:无法解构“订单”的属性“paymentInfo”,因为它未定义

如何修复映射错误“无法解构 'fac' 的属性 'Title',因为它未定义。” 在 React JS 中

未捕获的类型错误:无法解构“道具”的属性“食谱”,因为它未定义

无法解构“_ref”的属性“聊天”,因为它是未定义的(火力基地和反应)

未捕获的类型错误:无法解构“useAuth(...)”的属性“xxx”,因为它未定义

未捕获的类型错误:无法解构 'require(...).remote' 的属性 'dialog',因为它是未定义的,即使认为启用远程模块设置为 true

未捕获的类型错误:无法解构“aboutUsData”的属性“img”,因为它未定义。反应还原