Publicado em: 26/08/2023

Server e Client Components na Prática - Construindo Experiências Poderosas!


Vamos explorar na prática as diferenças entre Server Components e Client Components no Next.js, continuando a discussão teórica iniciada no vídeo anterior.

O Cenário Prático

Criamos uma rota /posts que faz uma requisição à API JSONPlaceholder para listar posts. Inicialmente, implementamos como Server Component, mostrando como:

  • O código executa apenas no servidor (logs aparecem no terminal, não no navegador)
  • Podemos fazer requisições diretamente no componente
  • O HTML é pré-renderizado no servidor

Ao tentar adicionar um evento de clique diretamente na Server Component, encontramos um erro - eventos de interatividade não funcionam em Server Components pois são executados apenas no servidor.

Solução: Isolando a Interatividade

Para resolver, adotamos a estratégia de mover a interatividade para "folhas" da árvore de componentes:

  1. Mantemos a lista de posts como Server Component
  2. Criamos um componente Post separado para cada item
  3. Transformamos o componente Post em Client Component
  4. Adicionamos o evento de clique apenas no componente Post

Essa abordagem nos permite:

  • Manter a vantagem de Server Components para data fetching
  • Adicionar interatividade onde necessário
  • Minimizar o código enviado ao cliente

Variáveis de Ambiente e Segurança

Exploramos também como as variáveis de ambiente se comportam diferentemente em Server e Client Components:

  • Variáveis padrão (sem prefixo) são acessíveis apenas no servidor
  • Variáveis com prefixo NEXT_PUBLIC_ são disponibilizadas ao cliente
  • Isso garante que credenciais sensíveis nunca vazem para o frontend

Essa separação é crucial para segurança, especialmente quando lidamos com chaves de API ou conexões com bancos de dados.

Padrões Recomendados

Para estruturar seus componentes de forma eficiente:

  1. Comece com Server Components como padrão
  2. Identifique partes que precisam de interatividade
  3. Isole essas partes em componentes menores marcados como Client Components
  4. Mantenha a lógica de data fetching no servidor sempre que possível
  5. Use variáveis de ambiente corretamente prefixadas

Considerações Finais

O modelo híbrido de Server e Client Components no Next.js representa uma evolução significativa no desenvolvimento web:

  • Performance: Minimiza o JavaScript enviado ao cliente
  • Segurança: Mantém lógica sensível no servidor
  • Produtividade: Combina benefícios de SSR e interatividade
  • Otimização: Permite carregamento mais rápido do conteúdo crítico

Para projetos complexos, essa separação clara entre partes estáticas e interativas pode significar:

  • Melhor experiência de usuário
  • Maior segurança
  • Facilidade de manutenção
  • Otimização de recursos do servidor

Lembre-se: a chave está em entender quais partes realmente precisam ser interativas e isolar apenas essas como Client Components, mantendo o máximo possível no servidor para melhor performance e segurança.

Fernando Cunha
Artigo deFernando Cunha

Com mais de 15 anos de experiência em tecnologia e formado pela FAAP em Administração de empresas, hoje é o CEO da Mestres da Web, empresa referência no mercado nacional e com projeções de expansão internacional.

últimos vídeos

veja nossos vídeos mais recentes e esteja por dentro de muitas novidades.

Au 02 - Front-end - React - Estrutura de projeto - Mestres BEGIN
play

Au 02 - Front-end - React - Estrutura de projeto - Mestres BEGIN

Explorando a estrutura gerada pelo Create React App, entendendo o papel das pastas public e src, os conceitos de Virtual DOM, JSX e componentes, além de como o CSS é aplicado nos projetos React.

Autor deste artigo
Fernando Cunha17/03/2025
Au 03 - Front-end - React - Criando layout da nossa aplicação - Mestres BEGIN
play

Au 03 - Front-end - React - Criando layout da nossa aplicação - Mestres BEGIN

Explorando a criação de um layout fixo para a aplicação React, com barra lateral, barra superior e área dinâmica para conteúdo. Utilizando o React Router Dom v6 para gerenciar navegação entre rotas.

Autor deste artigo
Fernando Cunha17/03/2025
Au 04 - Front-end - React - Estilizando o layout da aplicação - Mestres BEGIN
play

Au 04 - Front-end - React - Estilizando o layout da aplicação - Mestres BEGIN

Abordando técnicas para organizar estilos em React, utilizando seletores CSS, CSS Modules, integração com React Router, reset CSS eficiente e boas práticas para garantir consistência visual e manutenibilidade.

Autor deste artigo
Fernando Cunha17/03/2025