Ошибка типа: не удается прочитать свойство ‘textContent’ неопределенного типа

#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);
      }