React Native - Ошибка доступа к извлеченным объектам данных JSON - PullRequest
0 голосов
/ 24 ноября 2018

Я очень новичок в React Native, Networking и Programming в целом.Я пытаюсь получить данные JSON из Reddit для приложения, которое я создаю, но я получаю сообщения об ошибках при попытке получить доступ к объектам данных.Ниже приведен код, который я использую для получения и консольного журнала этих данных.

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,

Нокогда я пытаюсь получить доступ ко второму вложенному объекту («после», «до» или «потомкам» (и так как потомки - это массив, я пытался получить доступ к первому элементу), я получаю следующую ошибку:

[17:00:39] TypeError: TypeError: TypeError: 
undefined is not an object (evaluating 'myData.data.after')

Что смущает меня, потому что я пытался поймать неопределенный объект с помощью своего оператора if. Любые советы, не знаю, куда идти. Спасибо

1 Ответ

0 голосов
/ 24 ноября 2018

Я могу ошибаться, но в третьей строке вы, возможно, не возвращаете res.json() на следующий .then() в своей цепочке Promise, например:

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(), потому что я сделал глупость форматирования.

...