如何在 React JS 中使用 RSS Feed 获取多个新闻数据

How to fetch Multiple news data using RSS Feed in React JS

我已经完成 RSS Feed 实施。现在我可以使用此代码获取 1 条新闻。我想使用这段代码获取多个新闻。我怎样才能做到这一点。

提前致谢。

class FetchDataFromRSSFeed extends Component {
  constructor() {
    super();
    this.state = {
      recentBlogPost: {
        name: '',
        url: ''
      }
    }
  }

  FetchDataFromRssFeed() {
    var request = new XMLHttpRequest();
    request.onreadystatechange = () => {
      if (request.readyState == 4 && request.status == 200) {
        var myObj = JSON.parse(request.responseText);
        for (var i = 0; i < 1; i ++) {
          this.setState({
            recentBlogPost: {
              name: myObj.items[i].title,
              url: myObj.items[i].link
            }
          });
        }
      }
    }
    request.open("GET", "https://api.rss2json.com/v1/api.json?rss_url=https%3A%2F%2Fblog.codecarrot.net%2Ffeed.xml&order_dir=desc&count=30", true);
    request.send();
  }

  componentDidMount() {
    {this.FetchDataFromRssFeed()}
  }

  render() {
    return (
      <div>
        Check out our blog: <a target="_blank" href={this.state.recentBlogPost.url}>{this.state.recentBlogPost.name}</a>
      </div>
    );
  }
}

我已经实现了 RSS Feed。现在我可以使用此代码获取 1 条新闻。我想使用此代码获取多个新闻。

而不是像这样定义对象,

recentBlogPost: {
   name: '',
   url: ''
}

你需要定义一个array,

recentBlogPost: []

现在不再只设置第一条记录,

var myObj = JSON.parse(request.responseText);
for (var i = 0; i < 1; i ++) {
   this.setState({
      recentBlogPost: {
         name: myObj.items[i].title,
         url: myObj.items[i].link
      }
   });
}

您需要设置完整的数组,

var myObj = JSON.parse(request.responseText);
this.setState({
    recentBlogPost: myObj.item
});

最后只显示 1 条记录,

<div>
   Check out our blog: <a target="_blank" href={this.state.recentBlogPost.url}>{this.state.recentBlogPost.name}</a>
</div>

您需要遍历状态数组,

{this.state.recentBlogPost.map(post=>{
    return <div key={post.title}>Check out our blog: <a target="_blank" href={post.link}>{post.title}</a></div>
})}

除了@ravibagul91 的出色解释外,这是完整的 React 组件。有关策略的详细信息,请参阅:

    import React, { Component } from "react";

    export default class FetchDataFromRSSFeed extends Component {
      constructor() {
        super();
        this.state = {
          items: []
        };
      }

      async componentDidMount() {
        try {
          const response = await fetch(
            "https://api.rss2json.com/v1/api.json?rss_url=https%3A%2F%2Fblog.codecarrot.net%2Ffeed.xml&order_dir=desc"
          );
          const json = await response.json();
          this.setState({ items: json.items });
        } catch (error) {
          console.log(error);
        }
      }

      render() {
        console.log(this.state);
        return (
          <div>
            Check out our blog:
            {this.state.items.map(item => (
              <li key={item.guid}>
                <a target="_blank" rel="noopener noreferrer" href={item.link}>
                  {item.title}
                </a>
              </li>
            ))}
          </div>
        );
      }
    }

未设置样式的结果如下所示: