Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

TypeError: this.state.fotos.map is not a function

Estou tendo o erro "TypeError: this.state.fotos.map is not a function" quando tento atualizar a pagina após colocar o seguinte código na Timeline:

componentDidMount(){

        fetch(`https://instalura-api.herokuapp.com/api/fotos?X-AUTH-TOKEN=${localStorage.getItem("auth-token")}`)
        .then(response => response.json())
        .then(fotos => {
            console.log(fotos);

            this.setState({fotos:fotos})
        });
    }

Antes de alterar ele funciona, mas quando coloco a parte do token ele mostra o erro "TypeError: this.state.fotos.map is not a function" no navegador. O erro aparece como sendo no Timeline.js, no método render, na linha 23. Segue o código do Timeline.js:

import React, { Component } from 'react';
import FotoItem from './FotoItem';

export default class Timeline extends Component {

    constructor(){

        super();
        this.state = {fotos:[]};
    }

    componentDidMount(){

        fetch(`https://instalura-api.herokuapp.com/api/fotos?X-AUTH-TOKEN=${localStorage.getItem("auth-token")}`)
        .then(response => response.json())
        .then(fotos => {
            this.setState({fotos:fotos})
        });
    }

    render(){
        return (
        <div className="fotos container">
            {
                this.state.fotos.map(foto => <FotoItem key={foto.id} foto={foto}/>)
            }
        </div>            
        );
    }
}

Antes de colocar a parte do token no "componentDidMount", quando eu estou na página de login e entro com os dados, consigo navegar para a Timeline, mas onde deveria aparecer o token aparece uma linha vazia. E eu tenho que fazer pelo Herokuapp porquê o .jar deu problema pra mim desde o módulo 1 de react.

4 respostas

Fala aí Hugo, tudo bem? Esse problema deve estar acontecendo porque ao realizar o .setState passando o novo valor para fotos provavelmente não está sendo setado um array.

Consegue fazer um console.log das fotos e verificar o que a API está retornando?

fetch(`https://instalura-api.herokuapp.com/api/fotos?X-AUTH-TOKEN=${localStorage.getItem("auth-token")}`)
    .then(response => response.json())
    .then(fotos => {
        console.log(fotos)
        this.setState({fotos:fotos})
    });

Espero ter ajudado.

Fala Matheus. Cara, vem isso aqui:

{timestamp: 1554167656493, status: 403, error: "Forbidden", message: "Access Denied", path: "/api/fotos"}
error: "Forbidden"
message: "Access Denied"
path: "/api/fotos"
status: 403
timestamp: 1554167656493
__proto__:
constructor: ƒ Object()
hasOwnProperty: ƒ hasOwnProperty()
isPrototypeOf: ƒ isPrototypeOf()
propertyIsEnumerable: ƒ propertyIsEnumerable()
toLocaleString: ƒ toLocaleString()
toString: ƒ toString()
valueOf: ƒ valueOf()
__defineGetter__: ƒ __defineGetter__()
__defineSetter__: ƒ __defineSetter__()
__lookupGetter__: ƒ __lookupGetter__()
__lookupSetter__: ƒ __lookupSetter__()
get __proto__: ƒ __proto__()
set __proto__: ƒ __proto__()

Tem jeito isso ai? Se precisar mando mais informações.

solução!

Tenho esse erro aparecendo aqui agora.

{timestamp: 1554295388297, status: 500, error: "Internal Server Error", exception: "java.lang.IllegalArgumentException", message: "JWT String argument cannot be null or empty.", …}
error: "Internal Server Error"
exception: "java.lang.IllegalArgumentException"
message: "JWT String argument cannot be null or empty."
path: "/api/fotos"
status: 500
timestamp: 1554295388297
__proto__: Object