Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Erro ao executar um Array

Boa tarde, Estou recebendo este erro como retorno após fazer a resquisição de uma api no console do navegador . ('Uncaught TypeError: local.map is not a function') A minha API está retornando no console, porém quando eu chamo o 'state setLocal', que é a função que guarda os dados da api no array eu recebo esse erro como retorno, vou colocar o código na descrição a baixo ... obrigado por enquanto :)


![](![](export default function Item({ city }: { city: string }) { return (

{city}
)

}

import { Ilocaliza } from "../../interface"; import Item from "./Item"; export default function Lista({ localizacao }: { localizacao: Ilocaliza[] }) { return (

{localizacao.map((dado, index) => ( <Item key={index} {...dado} /> ))}
    </div >)}

import Lista from "./Lista/Lista"; import axios from "axios"; import { useState } from "react";

export default function Principal() { const [local, setLocal] = useState([]) function Localizacao() {

    axios.get('https://api.ipgeolocation.io/ipgeo?apiKey= aqui é a minha chave da "API"')
        .then((res) => {
            setLocal(res.data)
        })}
return (
    <div>![Insira aqui a descrição dessa imagem para ajudar na acessibilidade](https://cdn1.gnarususercontent.com.br/1/920251/ed1050ef-b81a-4fab-ab8b-e69f8eb6a2f4.png)  
        <button onClick={Localizacao}>adicionar dados</button>
        <Lista localizacao={local} />
    </div>
)}))
1 resposta
solução!

Oii, Dev! Tudo bem?

Agradeço por aguardar o nosso retorno.

O erro "Uncaught TypeError: local.map is not a function" ocorre quando você tenta chamar o método "map" em uma variável que não é um array.

E ao olhar o seu código, percebi que o estado localé iniciado como um array vazio, mas quando você chama a função Localizacao e recebe os dados da API, você está definindo o estado "local" como um objeto retornado pela API e não como um array. Por isso, ao tentar executar o método map na variável localizacao, que é o valor do estado local, o erro acontece.

Para corrigir esse problema, você precisa garantir que o estado local seja sempre um array. Uma opção seria modificar a função localizacao para que ela defina o estado "local" como um array contendo apenas o objeto retornado pela API. Por exemplo:

function Localizacao() {
  axios.get('https://api.ipgeolocation.io/ipgeo?apiKey= aqui é a minha chave da "API"')
    .then((res) => {
      setLocal([res.data]) // define o estado "local" como um array contendo apenas o objeto retornado pela API
    })
}

Dessa forma, o estado local sempre será um array, mesmo que contenha apenas um objeto, e você poderá executar o método map na variável localizacao sem problemas.

Além disso, vale lembrar que é uma boa prática definir o tipo do estado "local" no momento em que ele é criado, para evitar erros de tipagem. Por exemplo:

const [local, setLocal] = useState<Ilocaliza[]>([]) // define o tipo do estado "local" como um array de objetos que seguem a interface "Ilocaliza"

Espero ter ajudado!

Bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!