【问题标题】:Fetch specific data from external api in React JS从 React JS 中的外部 api 获取特定数据
【发布时间】:2021-02-12 02:16:40
【问题描述】:

我正在尝试从外部 api 获取配置文件数据。提取工作,但它一次带来所有数据。如果我调用用户名,代码会给出用户名列表而不是一个用户名。如何通过此代码获取特定的获取请求?有什么方法可以动态生成通话ID吗?

这是我尝试过的代码



export default class About extends React.Component {

  constructor(props) {
    super(props);
    this.state = {
      items:[],
      isLoaded: false,
    }
  }
    componentDidMount(){

      fetch('http://___.com/api/users/')
        .then(res => res.json())
        .then (json => {
                this.setState({
                  isLoaded: true,
                  items: json,
                })
        })
    }
  render() {
      var { isLoaded , items } = this.state;
      if (!isLoaded) {
        return <div>Loading...</div>;
      }
      else
          <div>
            Data has been loaded
          </div>

    return (
          <div>
            <ul>
              {items.map(item => (
                    <li key={item.id}>
                      Name: {item.username}
                    </li>
              ))};
            </ul>
          </div>
    ) 
  }
}

请注意,api 中的 json 数据具有“id”和“username”字段,并且 fetch 用于一次获取所有数据。

【问题讨论】:

    标签: json reactjs api rest


    【解决方案1】:

    试试这个代码

    componentDidMount(){
              
    
      fetch('http://___.com/api/users/')
        .then(res => 
          if (res.ok) {
                this.setState({
                  isLoaded: true,
                  items: res.json(),
                })
       })
    }
    

    【讨论】:

    • 不起作用。 if 循环因在我认为的函数中被调用而出错
    【解决方案2】:

    您可以在请求正文中传递参数,让服务器知道您正在寻找什么。 在你的情况下,你可以使用这样的东西:

          fetch('http://___.com/api/users/',{
                    method: 'POST',
                    body: JSON.stringify({
                    id: 'userId'
                    })})
      
    

    根据react official docs

    【讨论】:

    • 这不起作用,错误是说“GET/POST 方法不能有正文”。我猜这可能适用于没有 get/post 的 api
    • 你知道你的API接受的请求类型是什么吗?我编辑了代码,再试一次并告诉我结果。我在 fetch 选项中添加了 POST 方法。如果您的服务器接受 GET 请求,请将“POST”更改为“GET”
    • 尝试了代码。仍然是同样的错误。它要么给出整个列表,要么什么都不给出
    • 我怀疑问题可能出在您的 api 上?您是否尝试通过 API 使用邮递员进行查询?
    • 问题不在于 api。我检查过的 api 工作正常
    猜你喜欢
    • 1970-01-01
    • 2017-07-06
    • 1970-01-01
    • 2021-05-24
    • 1970-01-01
    • 2016-03-16
    • 1970-01-01
    • 2021-04-25
    • 1970-01-01
    相关资源
    最近更新 更多