【问题标题】:Display API data using Axios and a list in React使用 Axios 和 React 中的列表显示 API 数据
【发布时间】:2018-05-22 03:41:19
【问题描述】:

我正在尝试在 React 项目中向这个 https://www.themoviedb.org/documentation/api API 发出请求,然后在我的网站上显示 JSON 数据。

我正在使用 Axios 发出请求,并且我已经能够发出请求并获取适当的 JSON 数据并 console.log 它或在 Firefox 的 React 工具中查看它。但是,我很难在 ul 中显示数据。最初,我遇到了一个与每个列表项都有一个唯一键有关的错误,并且我已经解决了这个问题(或者我相信)。

这是我的请求以及我尝试呈现数据的方式:

import React, { Component } from 'react';
import ReactDOM from 'react-dom';
import axios from "axios";


export default class App extends Component {
  constructor(props) {
    super(props);
    this.state = {
      posts: []
    }
  }

  componentDidMount() {
    axios.get(`https://api.themoviedb.org/3/movie/now_playing?api_key=*apikeyhere*&language=en-US&page=1`)
      .then(res => {
        const posts = res.data.results.map(obj => [obj.title, obj.overview]);
        this.setState({ posts });
      });
  }

/*  render() {
    return (
      <div>
        <h1>Movie API data</h1>
        <ul>
          {this.state.posts.map(post =>
              <li key={post.toString()}>{post.title}</li>
            )}
        </ul>
      </div>
    );
  }
}
*/

  render() {
    return (
      <ul>
        {this.state.posts.map(function(post, index){
          return (
              <div key={index}>
                <h1>{post.title}</h1>
                <p>{post.overview}</p>
              </div>
            )
          }
        )}
      </ul>
    );

  }

}

如您所见,我尝试了多种方法来渲染它。我的代码有什么问题,为什么我网站的 ul 中没有呈现 JSON 数据?

【问题讨论】:

  • 您的代码看起来不错。你可以设置一个重新创建问题的 jsFiddle 或 codepen 吗?仅从查看您的代码来看,它似乎不会呈现的唯一方法是this.state.posts 中没有任何数据。
  • 哦,等等,这不是完整的应用程序吗?你需要有ReactDOM.render( &lt;App/&gt;, document.getElementById('root')); 可以实际呈现你的反应应用程序的地方。
  • 如果在setState之前添加console.log(posts),输出是什么?你看到一组数据了吗?

标签: json reactjs rendering axios


【解决方案1】:

我想,你在成功函数({title: obj.title, overview: obj.overview})中有一个错误

componentDidMount() {
    axios.get(`https://api.themoviedb.org/3/movie/now_playing?api_key=*apikeyhere*&language=en-US&page=1`)
      .then(res => {
        const posts = res.data.results.map(obj => ({title: obj.title, overview: obj.overview}));
        this.setState({ posts });
      });
  }

【讨论】:

  • 成功了。看起来整个问题是我在那里使用数组而不是带有键/值对的对象。谢谢。
猜你喜欢
  • 2019-09-15
  • 1970-01-01
  • 2018-09-03
  • 2020-12-26
  • 2018-09-20
  • 1970-01-01
  • 2020-09-08
  • 2019-11-01
  • 2019-11-15
相关资源
最近更新 更多