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

时间:2019-08-08 06:22:33

标签: reactjs api rss feed

我已经完成了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>
    );
  }
}

2 个答案:

答案 0 :(得分:0)

我已经完成了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>
})}

答案 1 :(得分:0)

除了@ 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>
        );
      }
    }

未设置样式的结果如下:

Sample output