【问题标题】:axios and fetch returning empty response data in Reactaxios 和 fetch 在 React 中返回空响应数据
【发布时间】:2020-03-23 11:12:55
【问题描述】:

我调用 api 的代码是:

import React from 'react';
import ReactDOM from 'react-dom';
import axios from 'axios';
class Hello extends React.Component{
 constructor(props){
    super(props);
    this.state={
        data: "good"
    }
    this.setdata=this.setdata.bind(this);
 }
 setdata(){
    return axios.get("http://52.14.161.145/1").
    then(res=>{
        return res.json;
    });
 }
 componentDidMount(){
    this.setdata().then(res=>{console.log(res);this.setState({data: res})});
 }
render(){
    return (<div><p>{this.state.data}</p></div>);
  }
 }
export default Hello;

我还了解 react 方法的生命周期和 axios 的异步特性以及 fetch api 调用。我可以在 chrome 的网络选项卡中看到响应,但 setdata 总是返回未定义。 另请注意,我正在捆绑反应代码并通过快速服务器提供服务。

我该如何解决这个问题?

【问题讨论】:

  • 为什么不在 setData 函数中设置 stae?
  • 这也行不通。我已经尝试了几乎所有可能的方法,但都是徒劳的
  • 您应该使用 asyncawait,这是一个示例,希望对您有所帮助:medium.com/better-programming/…
  • 这是 res.data.json
  • 我已经尝试过异步和等待。这就是我在这里发布问题的原因

标签: reactjs axios


【解决方案1】:
  • 您可以通过这种方式实现。
  • 最好将您的状态设置为获得响应的位置。

  • 这不是fetch调用,在axiosres.json不是必需的。

  • 您将在res.data 中获取您的数据

     setdata(){
       axios.get("http://52.14.161.145/1").
        then(res=>{
          console.log(res.data);
          this.setState({data: res.data})
         });
       }
    
    componentDidMount(){
     this.setdata();
    }
    

【讨论】:

  • 在控制台(res.data)你得到了什么?
  • 由于我是这个网站的新手,如果我接受了答案,我的问题是否会被否决??
  • 这取决于社区成员,他们对您的问题的看法。
【解决方案2】:

我觉得应该是

const response = await fetch("http://52.14.161.145/1",{
 headers:{
  "Content-Type":"application/json"
 }
});
console.log(await response.json())

【讨论】:

  • OP 使用axios。它解析 json
  • 它说 res.json 不是一个函数
  • 其实问题是用 axios 或 fetch 调用时 api 返回空响应。但我可以在网络选项卡中看到响应
  • 如果您在浏览器控制台上尝试此操作,则会在控制台上打印数据
猜你喜欢
  • 2018-02-20
  • 2018-03-14
  • 2016-11-08
  • 1970-01-01
  • 2017-03-23
  • 1970-01-01
  • 2021-04-18
  • 2018-09-16
  • 1970-01-01
相关资源
最近更新 更多