反应本机-错误访问提取的JSON数据对象

时间:2018-11-24 01:18:27

标签: javascript json react-native networking javascript-objects

作为一个整体,我对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'语句捕获未定义的对象。 有任何提示,不确定从何处去。谢谢

1 个答案:

答案 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()移动了。