3
respostas

[Bug] ERRO (FAQ): response.json() da API é undefined, o getStaticProps não passa como props o retorno da API para o componente abaixo

Configuração do projeto: Estou utilizando a versão 14 do Next e versão 18 do React. As configurações do projeto segue as recomendadas na aula, com a pasta Pages na raíz do projeto. O arquivo app.js está seguindo todas as recomendações da aula/doc, então o erro não é o mesmo do tópico passado.

Como estou na versão 14 tentei usar a recomendação que a documentação da para o uso do next com javascript:

export async function getStaticProps() {
    const API_URL = "https://gist.githubusercontent.com/omariosouto/0ceab54bdd8182cbd1a4549d32945c1a/raw/578ad1e8e5296fa048e3e7ff6b317f7497b31ad9/alura-cases-faq.json"
    const res = await fetch(API_URL)
    const faq = await res.json()
    return { props: { faq } }
  }

Essa função de fato retorna a resposta da api, quando dou um console.log() eu vejo o retorno da api no terminal do meu vscode, porém a getStaticProps não está passando como props esse retorno para o componente que esta sendo renderizado logo abaixo.

export default function Faq({faq}){


    return(
        <div>
            <GlobalStyleGeneric />
            <Title as="h1">Meu Primeiro FAQ Next Js</Title>
            <Link href="/">Home</Link>
            <p>olorem lorem lorem lorem</p>
            <ul>
                {faq.map(({answer, question})=>(
                     <li key={question}>
                        <article>
                            <h3>{question}</h3>
                            <p>{answer}</p>
                        </article>
                    </li>
                ))}
            </ul>
        </div>
    )
}

Já reiniciei o servidor Já testeu usar com useEffect(e funcionou, mas não é a proposta da aula) Na doc pede para retornar essa variável com uma extensão stargazers_count, o que também tentei, mas o erro permanece.

export default function Page({ repo }) {
  return repo.stargazers_count
}

O nome do arquivo arquivo é o mesmo da função e o mesmo da pasta Li todos os tópicos aqui da plataforma e não encontrei a solução, alguém pode me ajudar? Agradeço desde já a atenção de todos.

3 respostas

Boa tarde, comunidade.

Vim comunicar que decidi por continuar o curso usando a versão 12 do next para aprender a lidar com sistemas mais antigos, que ta,bém é importante. Enquanto a Alura não oferta um curso na versão 14 estou estudando em outros lugares.

O Next.js tem duas documentações agora, é um pouco confuso em entender, mas vai dar tudo certo.

abcs.

Olá, Fernando.

Tudo bem??

Primeiramente, desculpa a demora e qualquer transtorno. Vou tentar te ajudar.

Pelo que você descreveu, parece que você está fazendo tudo corretamente. A função getStaticProps está corretamente configurada e a resposta da API é visível no console do terminal. No entanto, parece que o problema está ocorrendo ao passar os dados para o componente Faq.

Uma coisa que você pode tentar é verificar se os dados estão sendo passados corretamente para o componente Faq. Você pode fazer isso adicionando um console.log(faq) no início do componente Faq para verificar se os dados estão sendo recebidos corretamente.

export default function Faq({faq}){
    console.log(faq); // Adicione esta linha

    return(
        // ...resto do código
    )
}

Se os dados estiverem sendo passados corretamente, você deverá ver a resposta da API no console do navegador. Se os dados não estiverem sendo passados corretamente, você verá undefined ou algum outro valor que não seja a resposta esperada da API.

Outra coisa que você pode tentar é verificar se a API está retornando os dados no formato esperado. A função getStaticProps espera que a API retorne um objeto com uma propriedade props que contém os dados que você deseja passar para o componente. Se a API não estiver retornando os dados nesse formato, você precisará ajustar a função getStaticProps para formatar os dados corretamente.

Por exemplo, se a API estiver retornando um array de objetos, você precisará ajustar a função getStaticProps para retornar os dados no seguinte formato:

export async function getStaticProps() {
    // ...resto do código

    return { 
        props: { 
            faq: faq 
        } 
    }
}

É positivo que você tenha decidido continuar o curso usando a versão 12 do Next.js para lidar com sistemas mais antigos, isso acontece muito no ambiente de trabalho real. Isso ampliará seu conjunto de habilidades e compreensão do framework, outra coisa muito boa, é o fato de você recorrer a documentação, ela ajuda muito, e pode ser útil consultar exemplos e casos de uso específicos.

Espero ter ajudado. Qualquer dúvida manda aqui. Bons estudos.

Boa tarde, Renan.

Em fóruns de programação li que a forma de trabalhar com propriedades estáticas mudaram na versão 14 e a função getStaticProps não funciona mais. O Next agora recomenda que você use o appRouter em vez de pageRouter (que é a forma de usar a pasta page na raíz para utilizar as rotas), então existem outras maneiras de trabalhar com propriedades estáticas.

Como estou fazendo outra trilha aqui da alura de Java eu optei por continuar na versão 12, que tem dado certo, apesar de alguns ajustes que devem ser feitos durante o curso, porque eu achei muito confusa a forma da versão 14, pois existem 3 formas diferentes novas para diferentes situações, o que vou estudar mais pra frente.

De toda forma muito obrigado por me responder.