Next.js: Le serveur ne s'affiche pas correctement lors de l'utilisation de `dangerouslySetInnerHTML`

Créé le 5 nov. 2016  ·  3Commentaires  ·  Source: vercel/next.js

Fond

J'utilise Prismic.io comme CMS et je récupère ces données dans getInitialProps() . Le contenu est préformaté en HTML, j'utilise donc dangerouslySetInnerHTML .

Comportement prévisible

La sortie de render() est identique lorsqu'elle est exécutée sur le serveur et sur le client.

Comportement réel

La sortie de render() sur le serveur est erronée et ne correspond pas au client.

Rendu depuis le serveur :

image

Rendu du client

image

La différence est que le contenu n'a pas le bon style sur le serveur car les nœuds DOM ne sont pas correctement imbriqués.

DOM du serveur :

image

DOM du client :

image

Code pertinent

const htmlFor = (type) => ({__html: this.props[type]})
<Article heading="Devotional" html={true} >
   {htmlFor('devotional')}
</Article>

et

const Article = ({heading, children, date, link, style, html}) => (
  <article
    className="mv3 mv4-m mv5-l measure"
    style={style}
  >
    <header>
      <h1 className="f3 f2-ns mt0 lh-title i garamond bb bw3 b--gold">
        {heading}
      </h1>
    </header>
    { html
      ? <p className="lh-copy" dangerouslySetInnerHTML={children} />
      : <p className="lh-copy" >{children}</p>
    }

    <footer>
      { date
        ? <p className="f6 i">{date}</p>
        : null
      }
      {link
        ? <a href="#" className='link dim mid-gray bb b--gold'>
            {link}
          </a>
        : null
      }
    </footer>
  </article>
)

Plus d'informations

Ce déploiement et /_src sont publics ici : https://thefaithnet-ynikfpghwu.now.sh/

Commentaire le plus utile

@flybayer merci pour le signalement. Je peux me tromper, mais passer votre sith via un validateur HTML me donne cette erreurhttps://validator.w3.org/nu/?doc=https%3A%2F%2Fthefaithnet-ynikfpghwu.now.sh%2F Je pense que c'est parce que en HTML, l'imbrication des balises p n'est pas valide. Pouvez-vous essayer d'utiliser un div au lieu du p externe ?

Tous les 3 commentaires

@flybayer merci pour le signalement. Je peux me tromper, mais passer votre sith via un validateur HTML me donne cette erreurhttps://validator.w3.org/nu/?doc=https%3A%2F%2Fthefaithnet-ynikfpghwu.now.sh%2F Je pense que c'est parce que en HTML, l'imbrication des balises p n'est pas valide. Pouvez-vous essayer d'utiliser un div au lieu du p externe ?

@impronunciable Wow, c'était tout !

Bonne prise et merci beaucoup pour votre aide !

Content que ça ait fonctionné !

Le dimanche 6 novembre 2016, 11h57 Brandon Bayer [email protected]
a écrit:

@impronunciable https://github.com/impronunciable Wow, c'était tout !

Bonne prise et merci beaucoup pour votre aide !

-
Vous recevez ceci parce que vous avez été mentionné.

Répondez directement à cet e-mail, consultez-le sur GitHub
https://github.com/zeit/next.js/issues/213#issuecomment -258693902, ou couper le son
le fil
https://github.com/notifications/unsubscribe-auth/AAKHp5EvRuw2GOjOViKL0MjKr0Vrt65sks5q7gbtgaJpZM4KqaPT
.

Cette page vous a été utile?
0 / 5 - 0 notes