"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Por que os componentes do cliente são renderizados como SSR no nextjs, marcar os componentes como "use client" ainda renderiza seu html como SSR, por quê?

Por que os componentes do cliente são renderizados como SSR no nextjs, marcar os componentes como "use client" ainda renderiza seu html como SSR, por quê?

Publicado em 2024-11-04
Navegar:382

Why do client components render as SSR in nextjs, marking components as \

Em Next.js, a forma como os componentes do lado do cliente ("use client") funcionam com SSR (Server-Side Rendering) às vezes pode ser confusa. Vamos decompô-lo:

Como funcionam os componentes de cliente e servidor em Next.js:

  • Componentes do servidor: Estes são os padrões em Next.js e são pré-renderizados no servidor. Eles não são enviados ao cliente como JavaScript, mas apenas como HTML.
  • Componentes do cliente: Quando você marca um componente com "use client", significa que o componente precisa ser executado no client-side porque pode ter interatividade (como useState, useEffect), ou depende de APIs de navegador que não funcionam em um ambiente de servidor.

Por que os componentes do cliente ainda renderizam HTML no servidor:

Mesmo que um componente esteja marcado como "usar cliente", o HTML inicial desse componente ainda pode ser gerado no servidor (SSR), mas apenas para fins de HTML estático . Isso significa:

  • Renderização inicial: O servidor gera o HTML da página, incluindo os componentes do cliente, para melhor desempenho e SEO. Este é HTML estático, não interativo.
  • Hidratação: Quando esse HTML chega ao navegador, Next.js hidrata o componente do lado do cliente com JavaScript, permitindo sua interatividade.

Por que isso acontece:

  • Desempenho: ao renderizar o HTML inicial no servidor, o usuário pode ver o conteúdo mais rapidamente (tempo até o primeiro byte mais rápido, ou TTFB) sem esperar o carregamento do JavaScript do lado do cliente.
  • SEO: A pré-renderização do HTML é importante para o SEO porque garante que os mecanismos de pesquisa possam rastrear e indexar o conteúdo.
  • Hidratação: Depois que o HTML é veiculado, Next.js envia o pacote JavaScript para o cliente, que "hidrata" o HTML estático, anexando ouvintes de eventos e tornando-o interativo.

O que acontece com “usar cliente”?

  • Renderização de HTML do lado do servidor: Mesmo que um componente seja do lado do cliente, Next.js ainda gera HTML para a visualização inicial. Portanto, embora não execute JavaScript interativo no servidor, ele envia marcação HTML para o cliente.
  • Hidratação do lado do cliente: O JavaScript necessário para a interatividade é enviado ao cliente e, assim que a página carrega, Next.js hidrata o componente, tornando-o totalmente funcional.

Equívoco:

Marcar um componente com "use client" não significa que ele não irá gerar qualquer HTML no lado do servidor. Significa simplesmente que o JavaScript interativo só será carregado no cliente, mas o servidor ainda poderá gerar o HTML estático inicial para renderização.

Para resumir:

  • SSR de componentes do cliente: O HTML para componentes do cliente pode ser pré-renderizado no servidor (para carregamento inicial), mas eles não são interativos até serem hidratados no cliente.
  • "use client": Esta diretiva garante que o JavaScript para interatividade do lado do cliente seja executado apenas no navegador, mas não interrompe a geração de HTML estático no servidor.

Se você quiser garantir que o componente se comporte de maneira diferente, talvez seja necessário repensar onde e como carregar determinado conteúdo dinâmico, especialmente se você espera um comportamento específico do cliente (como acessar uma janela ou documento).

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/shanu001x/why-do-client-components-render-as-ssr-in-nextjs-marking-components-as-use-client-still-render-its- html-as-ssr-why-1e70?1Se houver alguma violação, entre em contato com [email protected] para excluí-la
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3