我刚刚开始学习如何做出反应,但现在我陷入困境,希望能为您提供帮助。
我目前正在尝试限制来自新闻API的数据,并添加“加载更多”按钮以加载更多数据。
我在这里找到了一个很好的例子,但是我无法使其适应我的代码。
示例:codepen.io
我希望你能帮助我。
我的代码:
class App extends React.Component {
state = {
articles: [],
isLoading: true,
errors: null,
visible: 2
};
loadMore() {
this.setState(prev => {
return { visible: prev.visible + 4 };
});
}
getArticles() {
axios
.get(
"https://newsapi.org/v2/everything?q=ai&pageSize=100&sortBy=popularity&apiKey=API_KEY"
)
.then(response =>
response.data.articles.map(article => ({
date: `${article.publishedAt}`,
title: `${article.title}`,
url: `${article.url}`
}))
)
.then(articles => {
this.setState({
articles,
isLoading: false
});
})
.catch(error => this.setState({ error, isLoading: false }));
}
componentDidMount() {
this.getArticles();
}
render() {
const { isLoading, articles, visible } = this.state;
return (
<React.Fragment>
<H1>#AI</H1>
<div>
{!isLoading ? (
articles.map(article => {
const { date, title, url } = article;
return (
<Div key={url}>
<Div inner>
<P>{moment.utc(date).format("YYYY-MM-DD")}</P>
<A href={url}>{title}</A>
</Div>
</Div>
);
})
) : (
<Div loader />
)}
</div>
{this.state.visible < this.state.articles.length && (
<Button onClick={this.loadMore}>Load more</Button>
)}
</React.Fragment>
);
}
}
export default App;
最佳答案
缺少的是您没有在映射之前将可见计数应用于项目
{articles.slice(0, visible).map((article, index) => {
const { date, title, url } = article;
return (
<Div key={url}>
<Div inner>
<P>{moment.utc(date).format("YYYY-MM-DD")}</P>
<A href={url}>{title}</A>
</Div>
</Div>
);
})}
关于javascript - 创建“加载更多”按钮以增加从API提取的可见文章的数量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60586262/