Rumah  >  Soal Jawab  >  teks badan

Komponen dalam React tidak berubah selepas perubahan keadaan (componentDidMount fetch)

Saya mengikuti tutorial untuk membuat aplikasi berita, saya mendapat data daripada newapi, kod saya sama seperti dalam tutorial, tetapi selepas saya mengemas kini keadaan (this.state.articles), komponen saya tidak ubah. Saya menggunakan fungsi setState, saya cuba log keadaan dalam konsol, keadaan kelihatan baik selepas kemas kini, kaedah render berjalan, tetapi tiada apa-apa yang berubah, sesuatu mungkin telah berlaku

Kod/komponen saya

import React, { Component } from 'react'
import NewsItem from './NewsItem'

export default class News extends Component {
    articles = [
        {
            "source": {
                "id": "espn-cric-info",
                "name": "ESPN Cric Info"
            },
            "author": null,
            "title": "PCB hands Umar Akmal three-year ban from all cricket | ESPNcricinfo.com",
            "description": "Penalty after the batsman pleaded guilty to not reporting corrupt approaches | ESPNcricinfo.com",
            "url": "http://www.espncricinfo.com/story/_/id/29103103/pcb-hands-umar-akmal-three-year-ban-all-cricket",
            "urlToImage": "https://a4.espncdn.com/combiner/i?img=%2Fi%2Fcricket%2Fcricinfo%2F1099495_800x450.jpg",
            "publishedAt": "2020-04-27T11:41:47Z",
            "content": "Umar Akmal's troubled cricket career has hit its biggest roadblock yet, with the PCB handing him a ban from all representative cricket for three years after he pleaded guilty of failing to report det… [+1506 chars]"
        },
        {
            "source": {
                "id": "espn-cric-info",
                "name": "ESPN Cric Info"
            },
            "author": null,
            "title": "What we learned from watching the 1992 World Cup final in full again | ESPNcricinfo.com",
            "description": "Wides, lbw calls, swing - plenty of things were different in white-ball cricket back then | ESPNcricinfo.com",
            "url": "http://www.espncricinfo.com/story/_/id/28970907/learned-watching-1992-world-cup-final-full-again",
            "urlToImage": "https://a4.espncdn.com/combiner/i?img=%2Fi%2Fcricket%2Fcricinfo%2F1219926_1296x729.jpg",
            "publishedAt": "2020-03-30T15:26:05Z",
            "content": "Last week, we at ESPNcricinfo did something we have been thinking of doing for eight years now: pretend-live ball-by-ball commentary for a classic cricket match. We knew the result, yes, but we tried… [+6823 chars]"
        }
    ]

    constructor() {
        super();
        this.state = {
            articles: this.articles,
            loading: false
        }
    }

    async componentDidMount() {
        const URL = "https://newsapi.org/v2/top-headlines?country=us&category=business&apiKey="
        let data = await fetch(URL);
        let parsedData = await data.json()
        this.setState({
            articles: parsedData.articles
        })
        console.log(this.state.articles)
    }
    render() {
        console.log("render")
        return (
            <div>
                <div className="container">
                    <h2 className='my-4 mx-4'> NewsMonkey - Top Headlines </h2>
                    <div className="row">
                        {this.articles.map((elem) => {
                            return <div className="col-md-4" key={elem.url}>
                                <NewsItem title={elem.title?elem.title.slice(42):""} desc={elem.description?elem.description.slice(0, 88): ""} url={elem.url} imgURL={elem.urlToImage} />
                            </div>
                        })}
                    </div>
                </div>
            </div>
        )
    }
}

P粉384679266P粉384679266425 hari yang lalu612

membalas semua(2)saya akan balas

  • P粉724737511

    P粉7247375112023-09-12 17:52:54

    Hai @Curious, kod anda betul

    Hanya beri perhatian semasa membuatmap

    Anda menggunakan this.articles, iaitu senarai tetap (simulasi)

    Anda perlu memanggil this.state.articles中调用map dalam this.state.articles kerana ini adalah keadaan yang anda ubah dalam didMount

    balas
    0
  • P粉311464935

    P粉3114649352023-09-12 16:04:16

    this.articlesthis.state.articles Tak sama.

    Anda mempunyai sifat statik this.articles,你在渲染逻辑中使用了它 - this.articles.map(.... Pengambilan anda sedang mengemas kini keadaan (operasi biasa).

    Kemas kini logik pemaparan anda untuk membaca data daripada this.state.articles dan kemudian ia akan berfungsi.

    balas
    0
  • Batalbalas