【问题标题】:React fetch api data to componentReact 获取 api 数据到组件
【发布时间】:2018-12-30 20:02:18
【问题描述】:

我正在尝试从电影数据库 api 创建一个应用程序。 我遇到了一个小问题。 我有两个组件。首先,我使用 fetch 并为 Card 组件使用 map() 函数,我想在其中显示来自 api 的数据。如何正确连接?

https://codesandbox.io/s/p3vxqqz53q

渲染列表的第一个组件:

import React, { Component } from 'react';
import Card from "./Card";

class ListApp extends Component {
    constructor(props){
        super(props);
        this.state = {
            items: [],
            isLoaded: false,
        }
    };
    componentDidMount = () => {
        fetch("https://api.themoviedb.org/3/movie/popular?api_key=xxxxxxxx&page=1")
        .then(resp => resp.json())
        .then(resp => {
            this.setState({
                isLoaded: true,
                items: resp.results
            })
            console.log(this.state.items)      
    })};

    render() {
        var {isLoaded, items} = this.state;
        return (
            <div>
                {items.map( () => ( <Card/> ) )};
            </div>
        );
    }
}

export default ListApp;

第二个组件卡:

import React from 'react';

const Card = (items) => { 
        return (
            <div className="movie-container">
                <img src="https://image.tmdb.org/t/p/w185/{items.poster_path}" alt="NO PHOTO" className="movie-container__img" />
                <div className="movie-container__about">
                    <span className="movie-container__percent">{items.vote_average}</span>
                    <h2 className="movie-container__title">{items.original_title}</h2>
                    <p className="movie-container__date">{items.release_date}</p>
                    <p className="movie-container__text">{items.overview}</p>
                    <a href="https://www.themoviedb.org/movie/" className="movie-container__more">MORE</a>
                </div>
            </div>
            )
}

export default Card;

【问题讨论】:

    标签: javascript reactjs api components fetch


    【解决方案1】:

    您需要将item 对象作为道具传递给 Card 组件,例如

    {items.map(item => <Card key={item.id} item={item} /> )}
    

    然后从 Card 组件中访问 item,例如

    const Card = (props) => {
      const {item} = props;
      ...
    
    }
    

    【讨论】:

    • Aakash,在发布我的答案后,我看到了你的答案,所以,由于我忘记了关键部分,我将你的答案合并到我的答案中。
    【解决方案2】:

    这段代码应该可以工作。

    @Aakash 建议的 ListApp 中的地图:

     render() {
        var { isLoaded, items } = this.state;
        return (
          <div>
            {items.map(item => (<Card key={item.id} item={item} />))};
                </div>
        );
      }
    

    正确引用 item 属性的卡片:

    // Card.js
    import React from 'react';
    
    const Card = (props) => {
        const { item } = props;
        return (
            <div className="movie-container">
                <img src="https://image.tmdb.org/t/p/w185/{items.poster_path}" alt="NO PHOTO" className="movie-container__img" />
                <div className="movie-container__about">
                    <span className="movie-container__percent">{item.vote_average}</span>
                    <h2 className="movie-container__title">{item.original_title}</h2>
                    <p className="movie-container__date">{item.release_date}</p>
                    <p className="movie-container__text">{item.overview}</p>
                    <a href="https://www.themoviedb.org/movie/" className="movie-container__more">MORE</a>
                </div>
            </div>
        )
    }
    
    export default Card;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-23
      • 1970-01-01
      • 1970-01-01
      • 2019-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-27
      相关资源
      最近更新 更多