【发布时间】:2022-01-16 00:36:03
【问题描述】:
import React, { Component } from 'react'
import NewsItem from './NewsItem';
export class News extends Component {
constructor() {
super();
console.log("News Constructor");
this.state = {
articles: this.articles,
loading: false,
page: 1,
}
}
async componentDidMount() {
let url = `https://newsapi.org/v2/top-headlines?country=us&apiKey=########################&page=1&pageSize=20`;
let data = await fetch(url);
let parsedData = await data.json();
console.log(parsedData);
this.setState({
articles: this.parsedData.articles,
totalResults: this.parsedData.totalResults,
})
}
handlePrevClick = async () => {
console.log("Prev Click");
let url = `https://newsapi.org/v2/top-headlines?country=us&apiKey=########################&page=${this.state.page - 1}&pageSize=20`;
let data = await fetch(url);
let parsedData = await data.json();
console.log(parsedData);
this.setState({
articles: this.parsedData.articles,
page: this.state.page - 1,
})
}
handleNextClick = async () => {
console.log("Next Click");
let url = `https://newsapi.org/v2/top-headlines?country=us&apiKey=########################&page=${this.state.page + 1}&pageSize=20`;
let data = await fetch(url);
let parsedData = await data.json();
this.setState({
articles: this.parsedData.articles,
page: this.state.page + 1,
})
}
render() {
return (
<div className="container my-3">
<h1 className="text-center" >NewsKeeda - Top Headlines</h1>
<div className="row">
{this.state.articles.map((element) => {
return <div className="col-md-4" key={element.url} >
<NewsItem title={element ? element.title.slice(0, 35) : ""} content={element ? element.content : ""} imageUrl={element.urlToImage} newsUrl={element.url} />
</div>
})}
</div>
<div className="container d-flex justify-content-between">
<button disabled={this.state.page <= 1} type="button" onClick={this.handlePrevClick} className="btn btn-dark">← Previous</button>
<button disabled={this.state.page + 1 > Math.ceil(this.state.totalResults / 20)} type="button" onClick={this.handleNextClick} className="btn btn-dark">Next →</button>
</div>
</div>
)
}
}
export default News;
在上面编写的代码中..我无法从 api 检索数据。实际上我能够从 api 以 json 格式接收数据,但无法将它们传递给组件。由于安全原因,我用“#################”替换了我的api令牌,除此之外,一切都是一样的。我只是使用 react js 创建一个新闻网站并从 newsapi.org 获取新闻数据
【问题讨论】:
标签: javascript reactjs api fetch fetch-api