4
respostas

Acessando retorno fetch api

boa tarde, estou com problemas para acessar um array de objetos em um json. tenho sempre o retorno de que a fetch ocorrei um erro. mais consigo acessar os elementos normais mais os do array, me retorna erro na fetch "Ocorreu um problema na execução da fetch: Objects are not valid as a React child"

constructor () {
    super()
    this.state = {prestador: []}
  }
componentDidMount () {
    let myHeaders = new Headers()
    myHeaders.append('Content-Type', 'application/json')
    myHeaders.append('Authorization', 'Bearer ' + localStorage.getItem('auth-token'))

    // console.log(myHeaders.get('Authorization'))
    let requestInfo = {
      method: 'GET',
      headers: myHeaders
    }
    // console.log(requestInfo)
    fetch('http://localhost:3030/prestadores', requestInfo)
      .then(response => {
        console.log(response.status)
        console.log(response.ok)
        if (response.status === 200 || response.status === 400) {
          return response.json()
        } else {
          throw new Error(response.text())
        }
        // return response.text()
      })
      .then(prestador => {
        // console.log(prestador)
        this.setState({prestador: prestador})
        // this.setState({prestador: prestador})
      })
      .catch((error) => {
        console.log('Ocorreu um problema na execução da fetch: ' + error.message)
      })
  }

json:

{
    "pre_id": 1,
    "pre_app": "K",
    "pre_cadastro": "2017-04-06T01:07:48.000Z",
    "pre_nome": "Z- K-Rona 1",
    "pre_email": "m@m.com",
    "pre_aparelho": "M=samsung GT-I9060C_OS=Android_P=3_V=4.4_Lang=po_ 553388221205",
    "pre_liberou": 1,
    "pre_data_liberou": "2017-09-04T19:05:18.000Z",
    "viagens": [
        {
            "situacao": "Finalizadas",
            "total": 38
        },
        {
            "situacao": "Canceladas",
            "total": 10
        },
        {
            "situacao": "Canceladas Tempo",
            "total": 3
        }
    ],
    "docs": [
        {
            "id": 1,
            "tipo": 0,
            "arquivo": "2cd4dd10-811a-11e7-9198-91c6bc691bfa.jpg"
        },
        {
            "id": 2,
            "tipo": 1,
            "arquivo": "28d1f160-7d07-11e7-8edb-1d2251a1adbd.jpg"
        },
        {
            "id": 3,
            "tipo": 2,
            "arquivo": "36d10300-7d07-11e7-8edb-1d2251a1adbd.jpg"
        },
        {
            "id": 4,
            "tipo": 3,
            "arquivo": "40b44ad0-7d07-11e7-8edb-1d2251a1adbd.jpg"
        }
    ]
}
4 respostas

Opa Alexandre, dei uma pesquisa no erro e parece que o problema é que você deve ta usando alguma propriedade do objeto literal no jsx que não é apenas uma string, e sim um objeto. Dá uma olhada no seu jsx, acho que tá lá o problema.

Valeu Obrigado vou dar uma pesquisada.. já e uma luz..

ainda não consegui descobrir..

import React, { Component } from 'react'
import logo from './logo.svg'
import './App.css'

class App extends Component {

  constructor () {
    super()
    this.state = {prestador: []}
  }

  componentDidMount () {
    let prestadorJson = {
      'pre_id': 1,
      'pre_app': 'K',
      'pre_cadastro': '2017-04-06T01:07:48.000Z',
      'pre_nome': 'Alexandre',
      'pre_email': 'm@m.com',
      'pre_cidade': 'PIRAPORA',
      'pre_est': 'MG',
      'viagens': [
        {
          'situacao': 'Finalizadas',
          'total': 38
        },
        {
          'situacao': 'Canceladas Passageiro',
          'total': 10
        },
        {
          'situacao': 'Canceladas Tempo',
          'total': 3
        },
        {
          'situacao': 'Carro Quebrou',
          'total': 1
        },
        {
          'situacao': 'Canceladas Motorista',
          'total': 2
        }
      ],
      'docs': [
        {
          'id': 1,
          'tipo': 0,
          'arquivo': '2cd4dd10-811a-11e7-9198-91c6bc691bfa.jpg'
        },
        {
          'id': 2,
          'tipo': 1,
          'arquivo': '28d1f160-7d07-11e7-8edb-1d2251a1adbd.jpg'
        },
        {
          'id': 3,
          'tipo': 2,
          'arquivo': '36d10300-7d07-11e7-8edb-1d2251a1adbd.jpg'
        },
        {
          'id': 4,
          'tipo': 3,
          'arquivo': '40b44ad0-7d07-11e7-8edb-1d2251a1adbd.jpg'
        }
      ]
    }

    this.setState({prestador: prestadorJson})
    // let myHeaders = new Headers()
    // myHeaders.append('Content-Type', 'application/json')
    // myHeaders.append('Authorization', 'Bearer ' + localStorage.getItem('auth-token'))
    //
    // // console.log(myHeaders.get('Authorization'))
    // let requestInfo = {
    //   method: 'GET',
    //   headers: myHeaders
    // }
    // // console.log(requestInfo)
    // fetch('http://localhost:3030/prestadores', requestInfo)
    //   .then(response => {
    //     console.log(response.status)
    //     console.log(response.ok)
    //     if (response.status === 200 || response.status === 400) {
    //       return response.json()
    //     } else {
    //       throw new Error(response.text())
    //     }
    //     // return response.text()
    //   })
    //   .then(prestador => {
    //     // console.log(prestador)
    //     this.setState({prestador: prestador})
    //     // this.setState({prestador: prestador})
    //   })
    //   .catch((error) => {
    //     console.log('Ocorreu um problema na execução da fetch: ' + error.message)
    //   })
  }

  render () {
    const viagens = this.state.prestador.viagens
    const viagensItems = viagens.map(viagem =>
      <li>{viagem.situacao}</li>
    )

    return (
      <div className='App'>
        <div className='App-header'>
          <img src={logo} className='App-logo' alt='logo' />
          <h2>Welcome to React</h2>
        </div>
        <ul>{viagensItems}</ul>
        <p className='App-intro'>
          To get started, edit <code>src/App.js</code> and save to reload.
        </p>
      </div>
    )
  }
}

export default App

Ainda não descobrir. acho que besteira mais..