【问题标题】:Issue Fetching API Data with React.JS使用 React.JS 获取 API 数据的问题
【发布时间】:2018-01-16 02:21:31
【问题描述】:

我正在开发一个简单的 React Web 应用程序,但在查看我从这个模拟 api 中提取的某些数据时遇到问题:https://randomuser.me/api/

这是我的代码:

import React, { Component } from 'react';

class ApiTest extends Component {
    constructor() {
      super();
      this.state = {
        names: [],
      };
    }

    componentDidMount() {

  fetch('https://randomuser.me/api/?results=10')
  .then(results => {
    return results.json();
  }).then(data => {
    let names = data.results.map((name) => {
      return(
        <div key={name.results}>
           {name.title}
        </div>
      )
    })
    this.setState({names: names});
    console.log("state", this.state.names);
  })
}

  render() {
      return (
        <div className="App">

          <div className="container2">
            <div className="container1">
              {this.state.names}   
            </div>
          </div>

        </div>
      );
    }
  }

  export default ApiTest;

我可以根据我为所有这些 (https://blog.hellojs.org/fetching-api-data-with-react-js-460fe8bbf8f2) 找到的教程提取图片,但我似乎无法显示其他任何内容。我似乎没有收到任何错误,我在控制台中看到了这些对象。我在这里做错了什么?谢谢大家!!!

【问题讨论】:

    标签: javascript reactjs api components jsx


    【解决方案1】:

    将 jsx 放入组件状态确实不是一个好主意。状态应该由纯数据组成。然后您可以在render() 函数中灵活地转换数据:

    https://codesandbox.io/s/qqy9l78l06

    import React, { Component } from "react";
    
    class ApiTest extends Component {
      constructor() {
        super();
        this.state = {
          people: []
        };
      }
    
      componentDidMount() {
        fetch("https://randomuser.me/api/?results=10")
          .then(results => results.json())
          .then(data => this.setState({ people: data.results }));
      }
    
      render() {
        console.log(this.state);
        return (
          <div className="App">
            <div className="container2">
              <div className="container1">
    
                {this.state.people.map(person => (
                  <div>{person.name.first}</div>
                ))}
    
              </div>
            </div>
          </div>
        );
      }
    }
    
    export default ApiTest;
    

    【讨论】:

    • 这就是你将代码分成 .js 和 .jsx 文件的原因吗?谢谢!这似乎完美无缺。
    • 嗨!没有分离与它的工作原理无关 :-) 实际上在代码和框上 .js 和 .jsx 文件是平等的,但通常只有 .jsx 文件应该有 jsx 代码。
    • 我打勾了,但我猜如果你的代表少于 15 次,它在视觉上不会改变。感谢您的帮助!
    猜你喜欢
    • 2016-08-02
    • 2019-06-27
    • 1970-01-01
    • 1970-01-01
    • 2021-04-15
    • 1970-01-01
    • 2019-03-05
    • 1970-01-01
    • 2021-05-03
    相关资源
    最近更新 更多