【问题标题】:Not able to get the data ReactJS无法获取数据 ReactJS
【发布时间】:2020-05-09 05:42:09
【问题描述】:

我这里有这个调用 api 的反应代码。

第一个 console.log 调用返回数据,但第二个 console.log 未定义。

我哪里出错了?感谢您指出我的错误并非常感谢

export default class ProfileDetail extends Component {
state = {
    prodetail:'',
}

  async  componentDidMount(){
        const id = this.props.match.params.id           
        const searchurl = `https://www.demo.com/api/personinfo/persondetail?id=${id}`;
        const res = await axios.get(searchurl);
        this.setState({prodetail:res.data});
    }

   render() {
    const{ prodetail
    } =  this.state

    console.log(prodetail)
    console.log(prodetail.firstname)

【问题讨论】:

  • firstname 实际上是在 http 请求的响应中定义的吗?无论哪种方式,响应如何?
  • 如果第一个控制台返回数据..您应该能够看到那里有什么以及为什么第二个没有显示数据。可能是 proddetail 中没有名字!。
  • 这是直接 api 调用的结果:[{"ID":"e424a407-6619-4549-9036-670e0d517655","FirstName":"John","LastName":"Doe" }]
  • 第一个 console.log 显示这个 [{"ID":"e424a407-6619-4549-9036-670e0d517655","FirstName":"John","LastName":"Doe"}]
  • 第二个 console.log 未定义。我在想我错过了哪里。谢谢

标签: reactjs api rest


【解决方案1】:

假设您指的是第一个渲染,这是预期的。

在第一次渲染时,prodetail 只是一个空字符串。然后只调用componentDidMount。最重要的是,您的componentDidMount 是一个异步函数,它只会设置prodetail,直到返回axios.get

相反,您可能希望将prodetail 所需的渲染数据推迟到您的请求得到解决。例如

render() {
  const{ prodetail } =  this.state;

  if (prodetail) {
    console.log(prodetail[0].FirstName);
    return (
      <div>{prodetail[0].FirstName}</div>
    );
  }

  return <div>Loading</div>;
}

【讨论】:

  • 我尝试了你的建议,但在第二个 console.log render() { const{ prodetail } = this.state; if (prodetail) { console.log(prodetail) console.log(prodetail.firstname) return (
    {prodetail.firstname}
    ); } 返回
    加载中
    ; }
  • 第一次渲染时总是未定义。 prodetail 只是一个空字符串。即便如此,根据 API 返回的响应,它是一个数组,prodetail.firstname 仍然未定义,因为它根本不存在。如果有帮助,请根据您在问题中的评论查看更新的答案。
  • 谢谢。我会尽力。我还是 React 的新手。我几周前才开始。 React 与 C# 或 Java 等 OOP 概念完全不同
猜你喜欢
  • 2020-01-25
  • 2019-07-30
  • 2020-02-27
  • 2021-10-12
  • 2018-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-25
相关资源
最近更新 更多