-4

Pergunta

Estou recebendo o seguinte erro ao iniciar meu projeto Next.js:

Hydration failed because the initial UI does not match what was rendered on the server.
Unexpected attribute: cz-shortcut-listen="true"

O Next.js aponta para o meu layout.tsx, indicando que o HTML inicial não corresponde ao que foi renderizado pelo servidor.

É importante destacar que este erro não é o mesmo que ocorre com o Chakra UI, onde aparece:

A tree hydrated but some attributes of the server rendered HTML didn't match the client properties.

Para esse erro do Chakra, a própria documentação orienta adicionar suppressHydrationWarning no elemento <html>:

<html suppressHydrationWarning>
  <body>
    <Provider>{children}</Provider>
  </body>
</html>

Isso remove o aviso, mas não resolve o problema de fundo; é apenas um “silenciador” temporário até que a correção oficial seja aplicada pelo Next.js, como mencionado na documentação.

No entanto, o erro que estou enfrentando é diferente. No meu caso, o atributo inesperado é:

cz-shortcut-listen="true"

Gostaria de entender o que causa esse problema e como resolvê-lo.


Resposta

Depois de investigar por bastante tempo, descobri que o erro ocorre porque o HTML renderizado no cliente está recebendo atributos adicionais que não existem no HTML enviado pelo servidor. Quando o navegador insere atributos extras no <html> ou <body>, o Next.js detecta a diferença entre:

  • o HTML SSR (gerado no servidor)

  • o HTML client-side (montado no navegador)

Essa diferença faz o Next gerar o erro de hidratação.

No caso específico:

Unexpected attribute: cz-shortcut-listen="true"

isso significa que algum processo do ambiente do navegador adicionou automaticamente esse atributo durante a renderização no cliente. Como o servidor não adiciona esse atributo, os dois DOMs não coincidem, e o erro é acionado.

Esse comportamento não tem relação com o Chakra UI ou com suppressHydrationWarning.
É um problema diferente.


Solução

A solução é garantir que o navegador não insira atributos adicionais no DOM durante o carregamento da aplicação.

A forma mais simples de verificar e resolver é:

1. Abrir o projeto em uma janela anônima/privada do navegador

No modo privado, nada interfere no DOM, e o HTML carregado no cliente permanece idêntico ao do servidor. Isso elimina o erro imediatamente.

2. Outra opção

Desativar recursos do navegador que possam modificar automaticamente a página durante a renderização.

3. Alternativa adicional

Utilizar um navegador separado, configurado de forma limpa, exclusivamente para desenvolvimento.
Isso evita qualquer interferência indesejada no HTML gerado pelo cliente.

New contributor
Gabriel Ribeiro is a new contributor to this site. Take care in asking for clarification, commenting, and answering. Check out our Code of Conduct.
3

0

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.