Maison > interface Web > js tutoriel > Comment résoudre les erreurs d'hydratation dans Next.js

Comment résoudre les erreurs d'hydratation dans Next.js

WBOY
Libérer: 2024-09-06 21:00:18
original
975 Les gens l'ont consulté

How to Solve Hydration Errors in Next.js

"L'hydratation a échoué car le HTML rendu par le serveur ne correspondait pas à celui du client...."

Si vous utilisez Next.js pour créer des applications, vous devez avoir obtenu l'erreur ci-dessus ou quelque chose de similaire. C’est ce qu’on appelle l’erreur d’hydratation.

J'avais l'habitude d'avoir cette erreur lorsque j'ai commencé avec Next.js, mais je ne savais pas quoi faire et je ne me souciais jamais de la rechercher car cela n'affectait pas vraiment mon code à l'époque. Pas jusqu'à ce qu'un intervieweur me demande ce que je ferais pour résoudre une erreur d'hydratation dans Next.js. J'étais abasourdi parce que maintenant ce n'était pas un cas d'intervieweur essayant de me rabaisser, mais un cas de nonchalance et de pure ignorance. Je ne veux pas que tu sois comme moi lors de ta prochaine interview. Alors discutons de l'hydratation.

L'hydratation est le processus par lequel le HTML statique devient interactif en y ajoutant du Javascript. Ainsi, normalement, lorsqu'une page Web est affichée sur le serveur, elle perd son interactivité et ses gestionnaires d'événements avant d'atteindre le client. React est responsable de la construction de l'arborescence des composants sur le client. C'est ce qu'on appelle l'hydratation, car cela ajoute l'interactivité et les gestionnaires d'événements qui ont été perdus lors du rendu du code HTML côté serveur. React le compare avec le DOM réel rendu côté serveur. Ils doivent être identiques pour que React puisse les adopter.

S'il y a une inadéquation entre la page que nous avons et ce que le côté client pense que nous devrions avoir, nous obtenons une « erreur d'hydratation ». Certaines causes courantes d'erreur d'hydratation incluent : une imbrication incorrecte des éléments HTML, des données différentes utilisées pour le rendu, l'utilisation d'API uniquement pour le navigateur, des effets secondaires, etc.

Quelle que soit la cause, vous devrez la découvrir en lisant le message d'erreur que vous recevez. Les solutions possibles incluent :

1. Utilisation de useEffect pour s'exécuter sur le client uniquement.
Pour éviter une inadéquation d'hydratation, assurez-vous que le composant restitue le même contenu côté serveur que lors du rendu initial côté client. Vous pouvez utiliser le hook useEffect pour restituer intentionnellement du contenu sur le client. Voir exemple ci-dessous :

import { useState, useEffect } from 'react'

export default function App() {
  const [isClient, setIsClient] = useState(false)

  useEffect(() => {
    setIsClient(true)
  }, [])

  return <h1>{isClient ? 'This is never prerendered' : 'Prerendered'}</h1>
}
Copier après la connexion

2. Désactivation du rendu côté serveur sur des composants spécifiques.
Vous pouvez utiliser la fonctionnalité de désactivation du prérendu sur Next.js sur des composants spécifiques. Cela peut éviter les déséquilibres d’hydratation. Voir exemple ci-dessous :

import dynamic from 'next/dynamic'

const NoSSR = dynamic(() => import('../components/no-ssr'), { ssr: false })

export default function Page() {
  return (
    <div>
      <NoSSR />
    </div>
  )
}
Copier après la connexion

3. Utilisation de l'avertissement de suppression d'hydratation
Il y a des moments où le contenu sera inévitablement différent sur le serveur et le client, comme par exemple l'horodatage. Ce que vous pouvez faire est de faire taire l'avertissement de non-concordance d'hydratation en ajoutant suppressHydrationWarning={true} à l'élément.

Donc, avec ces trois méthodes, vous devriez être en mesure de résoudre cette erreur d'hydratation la prochaine fois qu'elle apparaîtra lors de la construction sur Next.js.

N'oubliez pas de vous abonner à ma page pour obtenir plus de contenu révélateur sur la programmation.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal