2017-10-20 20 views
0

J'essaye d'analyser les données d'un fil RSS. L'erreur que j'obtiens en ce moment est 'TypeError: Impossible de lire la propriété' title 'de undefined' (voir la méthode render()). La méthode getNews() semble fonctionner correctement et enregistrer le tableau des objets item dans 'news' (voir état), car j'ai vérifié que la longueur du tableau 'news' était correcte (30) dans la méthode render. Qu'est-ce que je fais mal?Analyse des objets du flux RSS dans React, pourquoi mon code est-il en panne?

>class App extends Component { 

constructor(props) { 
super(props); 

this.state = { 
    news: [] 
} 
this.getNews = this.getNews.bind(this); 
} 

componentDidMount() { 
this.getNews(); 
} 

getNews() { 

$.get("https://www.hs.fi/rss/tuoreimmat.xml", function (data) { 
    var $xml = $(data); 
    var items = []; 
    $xml.find("item").each(function() { 
    var $this = $(this), 
     item = { 
     title: $this.find("title").text(), 
     link: $this.find("link").text(), 
     description: $this.find("description").text(), 
     pubDate: $this.find("pubDate").text(), 
     } 
    items.push(item); 
    }.bind(this)); 
    this.setState({ news: items }) 
}.bind(this)); 
} 


render() { 
var newsItem = this.state.news[1]; 
var title = newsItem.title 

return (
    <div className="App"> 
    <header className="App-header"> 
     <h1 className="App-title">News</h1> 
    </header> 
    <div className="App-feeds"> 
    </div> 
    <div className="panel-list">{title}</div> 
    </div> 
);}} 
+1

ajax est ** asynchrone **. Même problème que d'essayer de manger une pizza avant qu'elle ne soit livrée – charlietfl

Répondre

0

Vous essayez d'obtenir le titre avant que l'état ait été défini. Un moyen facile de résoudre ce problème est juste:

var title = newItem && newItem.title 
+0

Cela semble avoir corrigé le message d'erreur, cependant, il n'affiche toujours pas le titre? – jdet