作为一个整体,我对React Native,网络和编程是一个新手。我正在尝试从Reddit中获取我正在构建的应用程序的JSON数据,但是在尝试访问数据对象时收到错误消息。以下是我用于获取和控制台记录此数据的代码。
componentDidMount(){
fetch ('https://www.reddit.com/r/financialindependence.json')
.then(res => res.json())
.then(data => {
this.setState({
data: data
})
})
.catch( error => {
console.error(error)
})
}
render() {
const myData = this.state.data
if (myData !== undefined) {
console.log(myData)
}
return(
<View style = {styles.container}>
<MainDrawerHeader title = 'Links' />
<Text> This is the Links Screen </Text>
</View>
)
}
}
这有效,并将以下内容记录到控制台。
[16:54:41] Object {
[16:54:41] "data": Object {
[16:54:41] "after": "t3_9ysab7",
[16:54:41] "before": null,
[16:54:41] "children": Array [
[16:54:41] Object {
[16:54:41] "data": Object {
[16:54:41] "approved_at_utc": null,
[16:54:41] "approved_by": null,
[16:54:41] "archived": true,
[16:54:41] "author": "Omitted For Privacy",
当我访问myData.data时,它也可以正常工作
[16:59:29] Object {
[16:59:29] "after": "t3_9ysab7",
[16:59:29] "before": null,
[16:59:29] "children": Array [
[16:59:29] Object {
[16:59:29] "data": Object {
[16:59:29] "approved_at_utc": null,
但是当我尝试访问第二个嵌套对象(“之后”,“之前”或“子代”)(并且由于子代是数组,我试图访问第一个元素)时,收到以下错误: / p>
[17:00:39] TypeError: TypeError: TypeError:
undefined is not an object (evaluating 'myData.data.after')
这让我感到困惑,因为我试图用我的'if'语句捕获未定义的对象。 有任何提示,不确定从何处去。谢谢
答案 0 :(得分:0)
我在这里可能会弄错,但是在您的第三行中,您似乎没有将res.json()
返回到Promise链中的下一个.then()
,就像这样:
componentDidMount(){
fetch ('https://www.reddit.com/r/financialindependence.json')
.then(res => {
let resultToPass = res.json();
return resultToPass;
})
.then(data => {
this.setState({
data: data
});
})
.catch( error => {
console.error(error)
})
}
至少从表面上讲,这将向我解释为什么您可以访问res
值并将其记录下来,但是它们没有将其存储到屏幕组件中-他们只是没有将其存储到您的位置呼叫this.setState({data: data})
。
编辑:我首先分配了一个变量,使return语句破了,但是我相信您可以轻松地做return res.json();
并且没事。
编辑2:因为我做了格式化操作,所以将})
的第二组this.setState()
移动了。