2
respostas

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

Olá. Estou passando o mesmo problema que outros usuários tiveram no fórum e claramente não houve resposta para solução. Houveram forums fechados como solucionados sem nenhuma solução.

Assim complica. Mas vamos lá...

Essa é minha Timeline.js :

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

export default class Timeline extends Component{

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

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

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

        </div>
        );
    }
}

Link para meu projeto: https://we.tl/t-EtBV13FMLJ

Estou sem fazer o curso por conta disso, podem me ajudar, por favor?

2 respostas

Boa noite, Leandro! Como vai?

Bom, o que o erro tá dizendo é que não tá conseguindo invocar o método map() a partir de this.state.fotos. Ou seja, provavelmente o problema é que a propriedade fotos do estado do componente não é um array como vc esperava!

Me diz o seguinte: quando vc faz console.log(fotos) dentro do componentDidMount() o que é impresso no console do navegador?

Olá Leandro,

O problema está na linha 12 do teu arquivo Timeline.js:

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

A url correta da api, para esta chamada é: https://instalura-api.herokuapp.com/api/fotos?X-AUTH-TOKEN=

(sem /public)

Também caí nessa pegadinha... ;)