【问题标题】:Cannot read property of object that I got from axios无法读取我从 axios 获得的对象的属性
【发布时间】:2020-06-24 20:13:07
【问题描述】:

我正在使用 react useState 钩子来设置一个空数组状态,然后我使用 useEffect 通过 axios 获取一些占位符数据。放置后,我尝试获取对象,但如果我尝试获取 postData1.body,它一直告诉我 postData1 未定义。

起初我以为它是一个数组,但是当我使用 typeof 时,它清楚地表明它是一个对象。所以我很困惑这里出了什么问题。是我获取数据不佳还是怎么回事?

提前致谢!

import React, { useState, useEffect } from 'react';
import axios from 'axios';

function Home() {
  const [postData, setPostData] = useState([]);

    useEffect(() => {
      axios.get('https://jsonplaceholder.typicode.com/posts').then(res => {
        setPostData(res.data);
      })
    }, [])


    console.log(typeof(postData[1]))
    console.log(postData[1])

    return (
        <div className="container">
            <h4 className="center">Home</h4>
            <p>Lorem ipsum, dolor sit amet consectetur adipisicing elit. 
              Unde, deleniti, amet iste ratione fugiat, dolorem aliquid adipisci aperiam rem iure provident ad? 
              Incidunt recusandae pariatur nisi quaerat corporis harum aperiam.</p>
        </div>
      );
    }

    export default Home;

编辑: 刚看到可以发图。所以也许这可能会有所帮助:第一张图片是当我使用 console.log(postData1,第二张图片是当我使用 console.log(postData1.body

【问题讨论】:

标签: javascript reactjs


【解决方案1】:

由于axios.get 是异步的,当您尝试从函数组件内部而不是钩子中检查更改时,它将显示未定义。如果您想看到响应,您可以直接添加成功axios.get,如下面的代码。

axios.get('https://jsonplaceholder.typicode.com/posts').then(res => {
  setPostData(res.data);
  console.log(res.data);
})

如果您想确保postData 已填满。您可以查看以下代码。

useEffect(() => {
    console.log(typeof(postData[1]));
    console.log(postData[1]);
}, [postData])

【讨论】:

  • 我明白你的意思。但是如果我 console.log postdata[0] 我得到我需要的对象。附带属性。但是,当我将 .body 与它结合使用时,它会变得混乱并说“TypeError:无法读取未定义的属性'body'”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-09-15
  • 2018-11-08
  • 2016-06-30
  • 2017-03-11
  • 2022-10-19
  • 1970-01-01
  • 2022-12-13
相关资源
最近更新 更多