javascript - React - componentDidMount API 调用未获取数据?

标签 javascript api reactjs

所以我正在尝试创建这个画廊。我首先对图像的链接进行了硬编码,但现在想通过 API 调用来获取图像。我试图实现这个,但它以某种方式失败了,并且它仍然从 flickrImages 数组中获取硬编码图像。有什么建议吗? (顺便说一句,这是来自教程)

import React, {Component} from 'react'

const flickrImages = [
  "https://farm2.staticflickr.com/1553/25266806624_fdd55cecbc.jpg",
  "https://farm2.staticflickr.com/1581/25283151224_50f8da511e.jpg",
  "https://farm2.staticflickr.com/1653/25265109363_f204ea7b54.jpg",
  "https://farm2.staticflickr.com/1571/25911417225_a74c8041b0.jpg",
  "https://farm2.staticflickr.com/1450/25888412766_44745cbca3.jpg"
];

export default class Gallery extends Component {
  constructor(props) {
    super(props);
    this.state = {
      images: flickrImages,
      selectedImage: flickrImages[0]
    }
  }
  componentDidMount() {
    const API_KEY = 'a46a979f39c49975dbdd23b378e6d3d5';
    const API_ENDPOINT = `https://api.flickr.com/services/rest/?method=flickr.interestingness.+getList&api_key=${API_KEY}&format=json&nojsoncallback=1&per_page=5`;

    fetch(API_ENDPOINT).then((response) => {
      return response.json().then((json) => {
        const images = json.photos.photo.map(({farm, server, id, secret}) => {
          return `https://farm${farm}.staticflickr.com/${server}/${id}_${secret}.jpg`
        });
        this.setState({images, selectedImage: images[0]});
      })
    })
  }

  handleThumbClick(selectedImage) {
    this.setState({
      selectedImage
    })
  }

  render() {
    const {images, selectedImage} = this.state;

    return (
      <div className="image-gallery">
        <div className="gallery-image">
          <div>
            <img src={selectedImage} />
          </div>
        </div>
        <div className="image-scroller">
          {images.map((image, index) => (
            <div key={index} onClick={this.handleThumbClick.bind(this,image)}>
              <img src={image}/>
            </div>
          ))}
        </div>
      </div>
    )
  }
}

最佳答案

API_ENDPOINT 不正确,

flickr.interestingness.+getList&api_key=${API_KEY}

应该是

flickr.interestingness.getList&api_key=${API_KEY}

class Gallery extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      images: [],
    }
  }
  componentDidMount() {
    const API_KEY = 'a46a979f39c49975dbdd23b378e6d3d5';
    const API_ENDPOINT = `https://api.flickr.com/services/rest/?method=flickr.interestingness.getList&api_key=${API_KEY}&format=json&nojsoncallback=1&per_page=5`;

    fetch(API_ENDPOINT).then((response) => {
      return response.json().then((json) => {
        console.log(json);
        const images = json.photos.photo.map(({farm, server, id, secret}) => {
          return `https://farm${farm}.staticflickr.com/${server}/${id}_${secret}.jpg`
        });
        this.setState({images, selectedImage: images[0]});
      })
    })
  }

  handleThumbClick(selectedImage) {
    this.setState({
      selectedImage
    })
  }

  render() {
    const {images, selectedImage} = this.state;

    return (
      <div className="image-gallery">
        <div className="gallery-image">
          <div>
            <img src={selectedImage} />
          </div>
        </div>
        <div className="image-scroller">
          {images.map((image, index) => (
            <div key={index} onClick={this.handleThumbClick.bind(this,image)}>
              <img src={image}/>
            </div>
          ))}
        </div>
      </div>
    )
  }
}

ReactDOM.render(
  <Gallery name="World" />,
  document.getElementById('container')
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="container"></div>

关于javascript - React - componentDidMount API 调用未获取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40376320/

相关文章:

Javascript 符号 : () => { return 5; }

javascript - 正斜杠被替换为 : %252F in AngularJS

javascript - useEffect 中 undefined variable

reactjs - 无法读取未定义的属性 'dia'

javascript - jquery 将数组插入数组并在发布数据中维护键(多维?)

javascript - 使用 ng-repeat 检索选定的选项 angularJS

api - GCP 客户端工具的最佳身份验证策略

c++ - 谷歌上的 Qt http 错误请求

c# - IHttpActionResult 可接受的返回选项

css - 更改工具提示的样式 - recharts