Server Components rodam só no servidor, não mandam JavaScript para o navegador, e podem dar await em dados diretamente, o que elimina a maior parte do encanamento de fetch mais useEffect mais estado de carregamento. Client Components, marcados com use client, continuam donos da interatividade, do estado e das APIs do navegador. Você empurra a busca de dados para cima, nos server components, e mantém os client components como folhas pequenas, o que reduz o bundle e move a cascata de dados para o servidor.
Por que os entrevistadores perguntam isso
Essa é a maior mudança no React em anos, então o entrevistador está checando se você se manteve atualizado e consegue articular uma fronteira em vez de repetir texto de marketing. Ele quer ouvir que você entende o que atravessa a fronteira de serialização, onde o estado pode e não pode viver, e quais são os tradeoffs. Entusiasmo vago pega mal aqui; um candidato que nomeia uma restrição real passa a impressão de quem já entregou isso.
Como estruturar sua resposta
- Defina os dois tipos de componente em uma frase cada.
- Explique o que pode e o que não pode atravessar a fronteira.
- Descreva o formato da árvore de componentes que resulta disso.
- Cite um tradeoff concreto que você já enfrentou.
Exemplo de resposta
O modelo mental que fez sentido para mim é que a fronteira é uma fronteira de serialização, não uma pasta. Server Components renderizam no servidor e o código deles nunca chega ao navegador, então uma biblioteca pesada de markdown ou de datas usada ali custa zero kilobyte no cliente. Eles podem dar await em uma chamada de banco direto no corpo do componente. Qualquer coisa com estado, efeitos ou um event handler precisa ser um Client Component com use client no topo, e as props que atravessam para dentro dele precisam ser serializáveis, então você passa dados e não funções ou instâncias de classe. Na prática isso significa que as minhas árvores ficam com server components até o fundo e folhas interativas pequenas, e eu passo os dados buscados no servidor como props. O tradeoff que eu enfrentei em um projeto recente foi carga mental no code review, porque as pessoas ficavam colocando use client em um pai por causa de um botãozinho e puxando em silêncio uma subárvore inteira para o cliente. A gente acabou adicionando uma regra de lint e uma checagem de tamanho de bundle no CI para pegar isso.
Vai encarar essa entrevista em breve? O GhostPilot escuta a sua chamada ao vivo, identifica a pergunta no instante em que ela é feita e coloca uma resposta estruturada na sua tela em tempo real. Teste na sua próxima entrevista simulada ou pegue um Session Pass de $29, sem assinatura, para a hora da verdade.
Veja como funcionaPerguntas de acompanhamento que você pode esperar
- Onde o hook use entra nessa história?
- Como você lida com um formulário que precisa de uma ida e volta ao servidor?
- Como você faria cache de dados buscados dentro de um server component?
Mais perguntas para Desenvolvedor Full Stack
Seu entrevistador vai fazer a própria versão desta. Cole a descrição real da vaga no Question Predictor gratuito e receba as 20 perguntas que essa vaga tem mais chance de fazer, com o que cada uma está de fato sondando.
Prever minhas perguntas