1
resposta

Cannot read property 'map' of undefined

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

    componentDidMount(){
        fetch('http://lospraianos-env-1.qu3skpxsmw.sa-east-1.elasticbeanstalk.com/api/materials')
        .then(response => response.json())
        .then(resData => {
            this.setState( {data: resData.results});
        })

    }

render(){
<div>
                      <table className="pure-table">
                            <thead>
                                <tr>
                                    <th>id</th>
                                    <th>Produto</th>
                                    <th>Quantidade</th>
                                </tr>
                            </thead>
                            <tbody>{
                                    this.props.lista.map(function(data){
                                    return (  
                                    <tr key={data.codMat}>
                                        <td>{data.codMat}</td>
                                        <td>{data.material}</td>
                                 <td>{data.qntMin}</td>
                                    </tr>
                                    );
                                })
                            }
                            </tbody>
                        </table>
                    </div>
}

Esse é o codigo que eu to rodando para tentar receber os dados dessa API e colocar numa tabela, porém ta aparecendo o erro "TypeError: Cannot read property 'map' of undefined" quando tento renderizar

1 resposta

Fala aí Gabriel, beleza? Seu problema está em dois lugares, o primeiro é na hora de pegar o retorno da API e atualizar o estado, você está passando para um estado data ao invés de passar para o estado lista, portanto, o correto seria:

componentDidMount() {
    fetch('http://lospraianos-env-1.qu3skpxsmw.sa-east-1.elasticbeanstalk.com/api/materials')
    .then(response => response.json())
    .then(resData => {
        this.setState( {lista: resData.results});
    })
}

Agora o segundo problema está onde você pega a referência de lista para fazer o .map, o correto seria pegar do state e não das props, o correto seria:

<tbody>
    {
        this.state.lista.map(function(data) {
            return (
                <tr key={data.codMat}>
                    <td>{data.codMat}</td>
                    <td>{data.material}</td>
                    <td>{data.qntMin}</td>
                </tr>
            );
        })
    }
</tbody>

Espero ter ajudado