首页 > 解决方案 > 如何解决 TypeError: undefined is not an object (evaluate 'rss.items[i].title')?

问题描述

我一直收到这个TypeError: undefined is not an object (evaluating 'rss.items[i].title')错误。但是,当我运行时console.log(this.state.feed),它工作正常。谁能指出我做错了什么?

state = {
    feed: {}
 }

  fetchRSSFeed() {
    return fetch('http://www.nasa.gov/rss/dyn/breaking_news.rss')
    .then((response) => response.text())
    .then((responseData) => rssParser.parse(responseData))
    .then((rss) =>  { 
        for(let i = 0; i < 5; i++) {
        this.setState(prevState => ({
            ...prevState,         
            feed: rss.items[i].title
        }))
    })
  }
  }

    render() {
      {this.fetchRSSFeed()}
      // console.log(this.state.feed); // Console log here works. It logs out all the feed title

      MyStories = [{
        pic: require('../assets/images/news.jpg'), 
        title: Object.keys(this.state.feed).map(k => this.state.feed[k]),
        caption: 'caption'
      }]

      return (
        <SafeAreaView style={styles.container}>
          <Swiper
            cards={MyStories}
            renderCard={Card}
            infinite 
            backgroundColor="white"
            cardHorizontalMargin={0}
            stackSize={2} 
          />
        </SafeAreaView>
      )
    }
  }

标签: react-nativersstypeerrorexporss-reader

解决方案


 componentDidMount() {
     this.fetchRSSFeed()
   }
  fetchRSSFeed() {
  return fetch('http://www.nasa.gov/rss/dyn/breaking_news.rss')
  .then((response) => response.text())
  .then((responseData) => rssParser.parse(responseData))
  .then((rss) =>  { 
    for(let i = 0; i < 5; i++) {
    this.setState(prevState => ({
        ...prevState,         
        feed: rss.items[i].title
    })) }) }
   }

render() {
   MyStories = [{
    pic: require('../assets/images/news.jpg'), 
    title: Object.keys(this.state.feed).map(k => this.state.feed[k]),
    caption: 'caption'
  }]
return (
    <SafeAreaView style={styles.container}>
      <Swiper
        cards={MyStories}
        renderCard={Card}
        infinite 
        backgroundColor="white"
        cardHorizontalMargin={0}
        stackSize={2} 
      />
    </SafeAreaView>
  )
  }
}

推荐阅读