这是我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”
  未定义

最佳答案

如果您直接从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])})
  })

})

09-25 20:49