我刚刚开始学习如何做出反应,但现在我陷入困境,希望能为您提供帮助。

我目前正在尝试限制来自新闻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/

10-11 09:30