首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确显示API中的数据?

问如何正确显示API中的数据?
EN

Stack Overflow用户
提问于 2022-05-24 00:48:30
回答 1查看 69关注 0票数 0

大家好!我正在处理一个从API加载数据并随后显示在页面上的赋值。但是,我在页面上显示数据时遇到了问题,特别是在单击"title“之后。这些是赋值要求:

成功标准功能:从https://jsonplaceholder.typicode.com/albums加载专辑并显示在页面上。-The页面显示相册中的标题属性

-When一个相册的标题被点击,相册的照片是从https://jsonplaceholder.typicode.com/albums/${albumId}/photos获取的。

-The页面显示标题,并在单击相册后显示多达10张相册照片的缩略图。

具体说明和有用的提示

-The专辑已经在App.js中获得。编写代码以在App.js中显示相册,并以AlbumDetail.js格式显示相册详细信息。

-The相册应显示标题,每个相册应显示照片标题

-Each相册最多应该显示10张照片,但不应该更多地显示相册的照片,只有在点击相册的标题之后才能显示。每个照片的标签的alt属性应该设置为照片的标题。所有信息都可以显示在同一个页面上。

,到目前为止,这就是我所拥有的:

代码语言:javascript
复制
//App.js//

import React, { useEffect, useState } from "react";
import AlbumDetail from "./AlbumDetail";

function App() {
  const [albums, setAlbums] = useState([]);

  useEffect(() => {
    fetch("https://jsonplaceholder.typicode.com/albums?userId=1")
      .then((response) => response.json())
      .then(setAlbums)
      .catch((error) => {
        console.log(error);
      });
  }, []);

  return (
    <div className="App">
    <AlbumDetail albums={albums} />
      </div>
  );
}

export default App;
代码语言:javascript
复制
//AlbumDetail.js//

import React, {useState} from "react";

export default function AlbumDetail({ albums }) {
  const [clicked, setClicked] = useState(false);
  const [photos, setPhotos] = useState([]);
  
  const fetchPhotos = (albumId) => { fetch(`https://jsonplaceholder.typicode.com/albums/${albumId}/photos`)
    .then((response) => response.json())
    .then(setPhotos)
    .catch((error) => {
    console.log(error);
  });                                
  };
  
  const albumsList = photos.map((album, index) => (
  <div key = {index}>
      <h2>{album.title}</h2>
      <p
        onClick ={() => {
          setClicked(true);
          fetchPhotos(album.id);
        }}
        >
      </p>
      </div>
  ));
  
  const postPhotos = (
  <div>
      {photos.map((photos, index) => (
      <p key={index}>{`Photo ${index + 1}: ${photo.}`}</p>
      ))}
 </div> 
  );
  
  return (
  <div className="container">
      <div className = "albums">{albumsList}</div>
      <div className="photos">
        <h2> {clicked ? "title for selected album" : "Click the photo of the album"} </h2>
        {clicked && postPhotos}
      </div>
      </div>
  );
}

感谢您抽出时间阅读这篇文章,我将非常感谢您的任何帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-24 01:37:02

看上去有几个关键问题。

One

const albumsList = photos.map应该是const albumsList = albums.map。

2

代码语言:javascript
复制
const postPhotos = (
  <div>
    {photos.map((photos, index) => {
      <p key={index}>
        {`Photo ${index + 1}: ${photo.}`}
      </p>
    })}
  </div> 
);

photos.map((photos.

  1. 应该是photos.map((photo而不是photos.map((photo

,

  1. ,我假设您也想在这里添加图像。所以:

{photos.map((照片,索引) => (照片{索引+ 1} ))}

下面是一个有用的例子。它可能不会回答你所有的问题,但至少有一些图片正在显示。

​

代码语言:javascript
复制
const { useEffect, useState } = React;

function App() {
  const [albums, setAlbums] = useState([]);

  useEffect(() => {
    fetch("https://jsonplaceholder.typicode.com/albums?userId=1")
      .then((response) => response.json())
      .then((data) => {
        setAlbums(data);
      })
      .catch((error) => {
        console.log(error);
      });
  }, []);

  return (
    <div className="App">
      <AlbumDetail albums={albums} />
    </div>
  );

}

function AlbumDetail({ albums }) {

  const [clicked, setClicked] = useState(false);
  const [photos, setPhotos] = useState([]);
  
  const fetchPhotos = (albumId) => {
    fetch(`https://jsonplaceholder.typicode.com/albums/${albumId}/photos`)
      .then((response) => response.json())
      .then((data) => {
        setPhotos(data);
      })
      .catch((error) => {
        console.log(error);
      });                                
  };
  
  const albumsList = albums.map((album, index) => (
    <div key = {index}>
      <h4>{album.title}</h4>
      <p
        className="link"
        onClick={() => {
          setClicked(true);
          fetchPhotos(album.id);
        }}
      >Get photos
      </p>
    </div>
  ));
  
  const postPhotos = (
    <div>
      {photos.map((photo, index) => (
        <figure>
          <figcaption>Photo {index + 1}</figcaption>
          <img src={photo.thumbnailUrl} />
        </figure>
      ))}
   </div> 
  );
  
  return (
    <div className="container">
      <div className = "albums">{albumsList}</div>
      <div className="photos">
        <h2> {clicked ? "title for selected album" : "Click the photo of the album"} </h2>
        {clicked && postPhotos}
      </div>
    </div>
  );
}

ReactDOM.render(
  <App />,
  document.getElementById('react')
);
代码语言:javascript
复制
.link { cursor: pointer; }
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/17.0.2/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/17.0.2/umd/react-dom.production.min.js"></script>
<div id="react"></div>

​

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72356137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档