Reputation: 23
I already done RSS Feed
implementation. Now I'm able to fetch 1 News using this code. I want to fetch multiple news using this code. How can I do that.
Thank in advances.
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>
);
}
}
Upvotes: 2
Views: 1213
Reputation: 1260
Adding to the great explanation by @ravibagul91, here's the complete React component. Details on the strategy can be found in:
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>
);
}
}
The unstyled results look like this:
Upvotes: 0
Reputation: 20765
I already done RSS Feed implementation. Now i'm able to fetch 1 News using this code. I want to fetch multiple news using this code.
Instead of defining object like this,
recentBlogPost: {
name: '',
url: ''
}
you need to define an array
,
recentBlogPost: []
Now instead of setting first record only,
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
}
});
}
You need to set complete array,
var myObj = JSON.parse(request.responseText);
this.setState({
recentBlogPost: myObj.item
});
And finally displaying only 1 record as,
<div>
Check out our blog: <a target="_blank" href={this.state.recentBlogPost.url}>{this.state.recentBlogPost.name}</a>
</div>
You need to iterate over the state array,
{this.state.recentBlogPost.map(post=>{
return <div key={post.title}>Check out our blog: <a target="_blank" href={post.link}>{post.title}</a></div>
})}
Upvotes: 1