为什么我的数组为空?反应阅读JSON API

时间:2018-07-29 11:11:38

标签: javascript reactjs fetch

这是我在Drupal网站上的json:

[
    {
        title: "I believe every human has a finite number of heartbeats. I don't intend to waste any of mine.",
        uid: "gestor"
    },
    {
        title: "Man must explore, and this is exploration at its greatest",
        uid: "gestor"
    }
]

它有两个用方括号{}分隔的元素 这就是我试图在我的react组件中使用 Fetch 的方式。

componentWillMount(){
    // Con fetch me conecto al site de Drupal
    fetch('http://rest.dd:8080/all-of-us')
    .then(response => response.json())
    .then(postPrvSrv => {
      // A cada post lo coloco en un array
      console.log(postPrvSrv.results)
      postPrvSrv.results.forEach(post => {
        let data = {
          title:post.title,
          author:post.uid
        }
        console.log(data);
        // Actualizamos el state para poder renderizar
        this.setState({postPrvSrv:this.state.postPrvSrv.concat([data])})
      })
    })
  }

这是我的控制台日志结果:

console.log(postPrvSrv.results) =未定义

console.log(data); =没什么,因为它在 forEach

中的第27行上中断了

console.log(this.state.postPrvSrv.length) =0。很明显。

这是错误消息:

  

未处理的拒绝(TypeError):无法读取的属性“ forEach”   未定义

以及来自控制台的错误:

  

未捕获(承诺)TypeError:无法读取的属性“ forEach”   未定义

1 个答案:

答案 0 :(得分:2)

如果您是直接从Durpal端点返回一个数组,那么postPrvSrv变量(在获取响应处理程序中)将是一个普通数组。

假设postPrvSrv是一个数组,那么.results上的postPrvSrv字段将是undefined

这是您将收到“无法读取未定义的属性'forEach'” 的原因-您正试图在.forEach(..)字段上调用.results ,它在postPrvSrv数组上未定义。

要解决此问题,请尝试调整代码,如下面的注释所示:

fetch('http://rest.dd:8080/all-of-us')
.then(postPrvSrv => {

  console.log(postPrvSrv) // Fix this line to see log of data in console

  postPrvSrv.forEach(post => {  // Fix this line
    let data = {
      title:post.title,
      author:post.uid
    }
    console.log(data);

    this.setState({postPrvSrv:this.state.postPrvSrv.concat([data])})
  })

})