#javascript #reactjs #undefined
#javascript #reactjs #не определено
Вопрос:
Я получаю эту ошибку:
TypeError: Cannot read property 'textContent' of undefined
Я знаю, что цикл for выполняется, когда responseDocument
все еще undefined
. Как я могу решить эту проблему?
export default class App extends Component {
constructor() {
super();
this.state = {
newsFeed: {
number: null,
date: null,
news: null,
},
};
}
fetchRssFeed() {
const proxyUrl = 'https://cors-anywhere.herokuapp.com/';
const funkyGamesRssFeed = 'https://funkygames.de/rss.xml';
const request = new Request(proxyUrl funkyGamesRssFeed);
return fetch(request).then((results) => {
results
.text()
.then((str) => {
let responseDocument = new DOMParser().parseFromString(str, 'application/xml');
const newsItems = responseDocument.getElementsByTagName('item');
let newsFeed = {
number: newsItems.length,
date: new Date(),
news: [],
};
for (let i = 1; i < newsItems.length; i ) {
let article = new Article();
article.title = responseDocument.getElementsByTagName('title')[i].textContent;
newsFeed.news.push(article);
}
}).catch((error) => console.log(error));
});
}
componentDidMount() {
this.fetchRssFeed().catch(e => console.log(e.message));
}
Комментарии:
1. Зачем использовать textContent, когда вы можете отобразить его с помощью
render()
метода?2. Я извлекаю данные из RSS-канала. С помощью «. textContent» я получил доступ к содержимому тега «title» из RSS-канала. Зачем мне использовать его в
render()
?3. О, моя ошибка, я думал, вы задаете текстовое содержимое вручную вместо использования
render()
4. Я знал, что вы, вероятно, делали это раньше, но попробуйте отследить виновника и выйти из всех частей, связанных с
textContent
5. Да, я сделал это. Когда я помещаю
console.log(responseDocument.getElementsByTagName('title')[i].textContent)
в цикл for, я получаю заголовок по желанию. Ошибка возникает только тогда, когда я присваиваю егоarticle.title
.
Ответ №1:
У меня это работает, когда я делаю это:
for (let i = 1; i < newsItems.length; i ) {
let article = new Article(
responseDocument.getElementsByTagName('title')[i].textContent,
);
newsFeed.news.push(article);
}