The Codest
  • Sobre nós
  • Serviços
    • Desenvolvimento de software
      • Desenvolvimento de front-end
      • Desenvolvimento backend
    • Staff Augmentation
      • Programadores Frontend
      • Programadores de back-end
      • Engenheiros de dados
      • Engenheiros de nuvem
      • Engenheiros de GQ
      • Outros
    • Aconselhamento
      • Auditoria e consultoria
  • Indústrias
    • Fintech e Banca
    • E-commerce
    • Adtech
    • Tecnologia da saúde
    • Fabrico
    • Logística
    • Automóvel
    • IOT
  • Valor para
    • CEO
    • CTO
    • Gestor de entregas
  • A nossa equipa
  • Case Studies
  • Saber como
    • Blogue
    • Encontros
    • Webinars
    • Recursos
Carreiras Entrar em contacto
  • Sobre nós
  • Serviços
    • Desenvolvimento de software
      • Desenvolvimento de front-end
      • Desenvolvimento backend
    • Staff Augmentation
      • Programadores Frontend
      • Programadores de back-end
      • Engenheiros de dados
      • Engenheiros de nuvem
      • Engenheiros de GQ
      • Outros
    • Aconselhamento
      • Auditoria e consultoria
  • Valor para
    • CEO
    • CTO
    • Gestor de entregas
  • A nossa equipa
  • Case Studies
  • Saber como
    • Blogue
    • Encontros
    • Webinars
    • Recursos
Carreiras Entrar em contacto
Seta para trás VOLTAR
2021-04-09
Desenvolvimento de software

Estratégias de obtenção de dados no NextJS

The Codest

Pawel Rybczynski

Software Engineer

Recentemente, o NextJS está a ganhar cada vez mais popularidade como forma de construir aplicações React. Certamente, um dos principais contribuintes é o facto de o NextJS oferecer várias estratégias diferentes de obtenção de dados.

E estes são:

  • Renderização do lado do cliente: CSR,
  • Renderização do lado do servidor: SSR,
  • Renderização de sítios estáticos: SSG,
  • Regeneração estática incremental: ISR.

NextJS, ao contrário do simples React oferece uma funcionalidade chamada pré-renderização. Isto significa que o HTML pré-renderizado é apresentado durante o carregamento inicial. Nas aplicações React tradicionais, toda a aplicação é carregada e processada no lado do cliente. Depois, após o JS código é carregada, a aplicação torna-se interactiva.

Geração estática

No SSG, o HTML é gerado em tempo de compilação e reutilizado para cada pedido. Após a criação de uma compilação de produção, cada pedido irá reutilizar esse ficheiro HTML gerado estaticamente.

Existem também dois tipos de geração estática: com e sem dados.

No primeiro caso, o HTML será gerado depois de obter os dados através da resolução da promessa. Nesse caso, podemos usar o método de obtenção de dados getStaticProps... mas somente se você estiver usando o Next.js 9.3 ou mais recente. Caso contrário, pense em atualizá-lo, pois o método antigo getInitialProps não é mais recomendado e será descontinuado. Esse método também é chamado em todas as navegações do lado do cliente, portanto, não é eficiente se você não quiser buscar dados em cada solicitação.

exportar a função assíncrona getStaticProps() {
  const res = await fetch("https://jsonplaceholder.typicode.com/posts");
  const posts = await res.json();
  return {
    props: { posts },
  };
} 

O que é realmente fixe é uma funcionalidade recentemente lançada chamada ISR (Incremental Static Regeneration), que é algo entre o SSG e o SSR. Permite-lhe (utilizando uma chave específica chamada revalidate) fazer com que a página seja regenerada de forma incremental. Isto significa que, com esta chave, não é necessário reconstruir a aplicação de cada vez que se pretende obter uma atualização dos dados obtidos a partir do servidor. Basta adicionar a chave revalidate com o período de revalidação em segundos.

exportar a função assíncrona getStaticProps() {
  const res = await fetch("https://jsonplaceholder.typicode.com/posts");
  const posts = await res.json();
  return {
    props: {
      posts,
    },
    revalidate: 30,
  };
}

Isso significa que, se os pedidos forem feitos após esse período, o servidor irá buscar os dados novamente.

Outra situação é quando se utiliza uma página dinâmica e o caminho depende de alguns dados externos. Nesse caso, podemos usar o método getStaticPaths informando quais rotas dinâmicas devem ser pré-carregadas:

exportar async const getStaticProps = ({ params }) => {
  const res = await fetch(`https://jsonplaceholder.typicode.com/posts/${params.id}`);
  const post = await res.json();
  return {
    props: { post },
  };
}
exportar a função assíncrona getStaticPaths() {
  const res = await fetch("https://jsonplaceholder.typicode.com/posts");
  const posts = await res.json();
  const paths = posts.map(({ id }) => ({ params: { id: `${id}` } }));
  return {
    paths,
    fallback: false,
  };
}

Existe uma boa maneira de verificar quais rotas dinâmicas foram criadas. Pode executar a próxima compilação e a próxima exportação e, depois disso, terá uma versão estática da sua aplicação no recém-criado diretório out.

Vamos agora limitar os caminhos de pré-compilação:

exportar a função assíncrona getStaticPaths() {
  return {
    paths: [{ params: { id: "1" } }, { params: { id: "2" } }],
    fallback: false,
  };
}

Depois de executar a exportação seguinte, podemos observar em ambos os casos (com e sem um número limitado de caminhos) um número diferente de mensagens encontradas em my-appoutposts.

próxima_exportação

Vamos agora dar uma olhada mais de perto no parâmetro de fallback crucial e obrigatório. Ele diz o que fazer se a página não foi pré-renderizada no momento da construção. Se for definido como true, o getStaticProps é executado e gera essa página. Se for falso, obtemos o erro 404 ao tentar carregar esse caminho específico. Outra coisa: as páginas com fallback que estão activadas em getStaticPaths não podem ser exportadas.

Abaixo pode ver os resultados da tentativa de carregar a mesma página dinâmica em ambos os casos:

Primeiro caso (sem trajectórias limitadas)

primeiro

Segundo caso (com caminhos limitados e recurso definido como falso)

segundo<em>fallback</em>false

Segundo caso (com caminhos limitados e fallback definido como verdadeiro)

segundo<em>fallback</em>verdadeiro

Renderização do lado do servidor

A principal diferença em relação ao SSG: é gerado um novo HTML em cada pedido. É utilizado principalmente quando estamos a obter alguns dados externos. Neste caso, não é necessário reconstruir a aplicação sempre que quisermos atualizar os dados do servidor.

exportar a função assíncrona getServerSideProps() {
  const res = await fetch("https://jsonplaceholder.typicode.com/posts");
  const posts = await res.json();
  return {
    props: {
      posts,
    },
  };
}

O método getServerSideProps é muito semelhante ao getStaticProps. A diferença é que getServerSideProps é executado em cada pedido, enquanto getStaticProps é executado uma vez em tempo de compilação.

Renderização do lado do cliente

Com a renderização do lado do cliente, o carregamento inicial da página é um pouco lento. A comunicação com o servidor ocorre em tempo de execução. Pode fazê-lo de uma forma mais tradicional:

const Blog = () => {


 const [posts, setPosts] = useState([]);
  useEffect(() => {
    const fetchData = async () => {
      const res = await fetch(
     "https://jsonplaceholder.typicode.com/posts");
      const posts = await res.json();
      setPosts(posts);
    };
    fetchData();
  }, []);

Além disso, podemos utilizar outra solução, 'swr' - Ganchos React para busca de dados da Vercel*, que é fortemente recomendada pelos criadores do NextJS. A sigla SWR significa State While Revalidate.

* Fonte de dados: SWR por Vercel

import useSWR from "swr";


const Blog = () =&gt; {
 const fetcher = (url) =&gt; fetch(url).then((r) =&gt; r.json());
 const { data: posts = [], error } = useSWR(
    "https://jsonplaceholder.typicode.com/posts", fetcher);
 se (erro) return <div>Falha no carregamento de mensagens</div>;
 se (!posts.length) return <div>carregando...</div>;
 retorno (
    <>
      {posts.map((post) =&gt; (
            {post.title}
        ))}
    </>
}

Resumo

NextJS dá nós a possibilidade adicional de escolher qual das estratégias de obtenção de dados queremos utilizar em cada página. Não precisamos de seguir apenas uma solução para toda a aplicação.

Atalho

  • getServerSideProps - quando é necessário pré-renderizar a aplicação em cada pedido com dados obtidos
  • getStaticProps - quando os dados podem ser obtidos uma vez em tempo de construção e utilizados em cada pedido sem atualização
  • getInitialProps - não recomendado, será descontinuado
  • getStaticPaths - para pré-renderização de caminhos dinâmicos
NextPrós e contras do JS
Consultoria em desenvolvimento de produtos digitais

Ler mais:

API Rails e CORS. Uma pitada de consciência

Porque é que deve (provavelmente) utilizar Typescript?

Código da mais alta qualidade no seu projeto SaaS. Porque é que um fundador (não técnico) se deve preocupar com isso?

Artigos relacionados

Ilustração de uma aplicação de cuidados de saúde para smartphone com um ícone de coração e um gráfico de saúde em ascensão, com o logótipo The Codest, representando soluções digitais de saúde e HealthTech.
Desenvolvimento de software

Softwares para o setor de saúde: Tipos, casos de uso

As ferramentas em que as organizações de cuidados de saúde confiam atualmente não se assemelham em nada às fichas de papel de há décadas atrás. O software de cuidados de saúde apoia agora os sistemas de saúde, os cuidados aos doentes e a prestação de cuidados de saúde modernos em...

OCODEST
Ilustração abstrata de um gráfico de barras em declínio com uma seta ascendente e uma moeda de ouro que simboliza a eficiência ou a poupança de custos. O logótipo The Codest aparece no canto superior esquerdo com o slogan "In Code We Trust" sobre um fundo cinzento claro
Desenvolvimento de software

Como dimensionar a sua equipa de desenvolvimento sem perder a qualidade do produto

Aumentar a sua equipa de desenvolvimento? Saiba como crescer sem sacrificar a qualidade do produto. Este guia cobre sinais de que é hora de escalar, estrutura da equipe, contratação, liderança e ferramentas - além de como o The Codest pode...

OCODEST
Desenvolvimento de software

Construir aplicações Web preparadas para o futuro: ideias da equipa de especialistas do The Codest

Descubra como o The Codest se destaca na criação de aplicações web escaláveis e interactivas com tecnologias de ponta, proporcionando experiências de utilizador perfeitas em todas as plataformas. Saiba como a nossa experiência impulsiona a transformação digital e o negócio...

OCODEST
Desenvolvimento de software

As 10 principais empresas de desenvolvimento de software sediadas na Letónia

Saiba mais sobre as principais empresas de desenvolvimento de software da Letónia e as suas soluções inovadoras no nosso último artigo. Descubra como estes líderes tecnológicos podem ajudar a elevar o seu negócio.

thecodest
Soluções para empresas e escalas

Fundamentos do desenvolvimento de software Java: Um Guia para Terceirizar com Sucesso

Explore este guia essencial sobre o desenvolvimento de software Java outsourcing com sucesso para aumentar a eficiência, aceder a conhecimentos especializados e impulsionar o sucesso do projeto com The Codest.

thecodest

Subscreva a nossa base de conhecimentos e mantenha-se atualizado sobre os conhecimentos do sector das TI.

    Sobre nós

    The Codest - Empresa internacional de desenvolvimento de software com centros tecnológicos na Polónia.

    Reino Unido - Sede

    • Office 303B, 182-184 High Street North E6 2JA
      Londres, Inglaterra

    Polónia - Pólos tecnológicos locais

    • Parque de escritórios Fabryczna, Aleja
      Pokoju 18, 31-564 Cracóvia
    • Embaixada do Cérebro, Konstruktorska
      11, 02-673 Varsóvia, Polónia

      The Codest

    • Início
    • Sobre nós
    • Serviços
    • Case Studies
    • Saber como
    • Carreiras
    • Dicionário

      Serviços

    • Aconselhamento
    • Desenvolvimento de software
    • Desenvolvimento backend
    • Desenvolvimento de front-end
    • Staff Augmentation
    • Programadores de back-end
    • Engenheiros de nuvem
    • Engenheiros de dados
    • Outros
    • Engenheiros de GQ

      Recursos

    • Factos e mitos sobre a cooperação com um parceiro externo de desenvolvimento de software
    • Dos EUA para a Europa: Porque é que as empresas americanas decidem mudar-se para a Europa?
    • Comparação dos centros de desenvolvimento da Tech Offshore: Tech Offshore Europa (Polónia), ASEAN (Filipinas), Eurásia (Turquia)
    • Quais são os principais desafios dos CTOs e dos CIOs?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Direitos de autor © 2026 por The Codest. Todos os direitos reservados.

    pt_PTPortuguese
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian jaJapanese es_ESSpanish nl_NLDutch etEstonian elGreek cs_CZCzech pt_PTPortuguese