Personalize as preferências de consentimento
Utilizamos cookies para ajudá-lo a navegar com eficiência e executar determinadas funções. Você encontrará informações detalhadas sobre todos os cookies em cada categoria de consentimento abaixo.

Os cookies categorizados como “Necessários” são armazenados no seu navegador, pois são essenciais para ativar as funcionalidades básicas do site.

Também utilizamos cookies de terceiros que nos ajudam a analisar como você usa este site, armazenam suas preferências e fornecem conteúdo e anúncios que são relevantes para você. Estes cookies só serão armazenados no seu navegador com o seu consentimento prévio.

Você pode optar por ativar ou desativar alguns ou todos esses cookies, mas a desativação de alguns deles pode afetar sua experiência de navegação.
Sempre ativo

Necessary cookies are required to enable the basic features of this site, such as providing secure log-in or adjusting your consent preferences. These cookies do not store any personally identifiable data.

Não há cookies para exibir.

Functional cookies help perform certain functionalities like sharing the content of the website on social media platforms, collecting feedback, and other third-party features.

Não há cookies para exibir.

Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics such as the number of visitors, bounce rate, traffic source, etc.

Não há cookies para exibir.

Performance cookies are used to understand and analyse the key performance indexes of the website which helps in delivering a better user experience for the visitors.

Não há cookies para exibir.

Advertisement cookies are used to provide visitors with customised advertisements based on the pages you visited previously and to analyse the effectiveness of the ad campaigns.

Não há cookies para exibir.

Conceitos de Programação

O que é Data Fetching e como utilizar?

2 de junho de 2022

Data Fetching é o processo de buscar dados de uma fonte, normalmente um servidor que responde através da API. Neste artigo, iremos abordar algumas formas de utilizar o data fetching no lado do servidor e no lado do cliente para API externa e para a API interna do NextJS.

[adrotate banner=”4″]

Renderizando páginas no lado do servidor

Abaixo, iremos comentar sobre algumas funções que o NextJS disponibiliza para renderizarmos as nossas páginas.

getStaticProps

É uma função que é executada durante o processo de build da aplicação para gerar as páginas estáticas.

Esta função também possui uma propriedade chamada revalidate, que podemos definir para renderizar o conteúdo em produção, caso haja alguma alteração dos dados.

Quando utilizar?

  • Para carregar os dados da página durante o build da aplicação a fim de melhorar o SEO;
  • Para manter os dados em cache;
  • Quando queremos que os arquivos html e json gerados pela execução da função sejam armazenados em um CDN para melhorar o desempenho.

Desvantagem

Porém, a sua desvantagem é que o conteúdo pode se tornar obsoleto.

getStaticPaths

Para utilizarmos getStaticProps a fim renderizar páginas com URLs dinâmicas, devemos usá-la em conjunto com a função getStaticPaths.

getStaticPaths é responsável por gerar as rotas dinâmicas da aplicação e só utilizamos ela com getStaticProps. Assim, não podemos utilizá-la com getServerSideProps, pois o getServerSideProps já gera as rotas automaticamente.

Normalmente, fazemos um fetch dentro de getStaticPaths e criamos as rotas com base nas propriedades dos dados retornados. Por exemplo, uma rota que contenha a propriedade id ou o nome do produto.

getServerSideProps

Essa função é executada no momento em que a página é solicitada pelo usuário.

Quando utilizar?

  • Quando queremos carregar os dados durante cada requisição da página.

Desvantagem

O tempo para o First Byte (TTFB) será maior do que o getStaticProps. Isso porque o servidor deve calcular o resultado para cada requisição. Até poderíamos armazenar o resultado em um cache por um CDN, porém, seria uma configuração extra.

Agora, se os dados atualizam com muita frequência e se não existe a necessidade de pré-renderizar a página para o SEO, podemos optar por realizar o data fetching no lado do cliente. Um bom exemplo disso seria um dashboard onde as informações são específicas para cada usuário e, por isso, não precisam ser pré-renderizadas e os dados atualizam a todo momento.

Criação do Data Fetching

Não existe muito segredo para criar data fetching para uma API externa, basta chamarmos ela normalmente com a seguinte sintaxe (tanto para a renderização no lado do cliente quanto para o lado do servidor).

Exemplo da utilização do data fetching em uma API externa para obter uma lista de produtos.

Lado do Cliente

Quando queremos realizar o data fetching para a API interna do NextJS no lado do cliente, devemos adicioná-lo dentro de um useEffect e a url da requisição passa a ser /api/arquivo:

O carregamento dos dados normalmente é realizado através do useEffect (ciclo de vida). Isso porque, com ele, temos o controle sob algum erro ou chamada indesejada que possa aparecer na aplicação. Dessa forma, nos garante que os dados só carreguem durante a inicialização da página.

swr

Existe uma outra forma de se realizar o data fetching no lado do cliente no NextJs e é através de um react hook chamado swr.

O swr utiliza uma estratégia que, no primeiro momento, exibe os dados (obsoletos) em cache para o usuário enquanto ele está revalidando os dados para obter as informações atualizadas.

Este hook é muito recomendado pelo NextJS para realizar o carregamento dos dados. Além disso, possui muitos outros recursos, como rastreamento de foco, representação em intervalos, entre outros.

Exemplo de utilização do swr.

Lado do Servidor

Agora, para realizar um data fetching para API interna do NextJS no lado do servidor, ao invés de fazer uma requisição para API/arquivo, iremos utilizar urlDoSite/api/arquivo.

Exemplo de data fetching com baixo desempenho.
Exemplo de data fetching com baixo desempenho.

Nos exemplos acima, temos um problema de desempenho. Isso porque estamos fazendo uma requisição desnecessária. Dessa forma, não faz sentido realizar um fetch para a API interna, pois as funções de renderização do NextJs são executadas no servidor, assim como a api interna. Portanto, estaríamos fazendo uma requisição do servidor para o mesmo servidor, para acessar o método get da API e obter os dados.

Para resolver este problema, poderíamos simplesmente mover todo o código relacionado ao get da API para a função getStaticProps. Porém, é mais elegante e reutilizável criar uma função com esse código e exportá-la da API ou de uma pasta lib na raiz do projeto.

Exemplo de data fetching com melhor desempenho.
Exemplo de data fetching com melhor desempenho.

Nestes exemplos, já não temos mais a requisição extra. Não precisa ser necessariamente uma API externa, como mostrado no exemplo, poderia ser uma lógica que acessa o banco de dados ou algum arquivo do sistema que gostaríamos de acessar com o file system.

Conclusão

O data fetching é muito importante para o SEO, temos que ter conhecimento das melhores práticas para realizá-lo tanto no lado do cliente como no lado do servidor.

Dessa forma, devemos analisar melhor a nossa aplicação e verificar qual é o melhor tipo de renderização para cada página.

Veja também:

O que é Solid!

Autor: Victor Gabriel de Carvalho Paulino.

[adrotate banner=”5″]

Imagem padrão

Autor

Julia Ilkiu

Artigos relacionados

Receba nossa
newsletter

Assine nossa newsletter e receba as últimas
novidades sobre o mundo da tecnologia.

    Eu autorizo a Luby a usar meus dados para o envio de conteúdos personalizados.