这是我在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
console.log(this.state.postPrvSrv.length)
=0。很明显。
这是错误消息:
未处理的拒绝(TypeError):无法读取的属性“ forEach” 未定义
以及来自控制台的错误:
未捕获(承诺)TypeError:无法读取的属性“ forEach” 未定义
答案 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])})
})
})