Next.js: `dangerouslySetInnerHTML`を使用すると、サーバーが正しくレンダリングされない

作成日 2016年11月05日  ·  3コメント  ·  ソース: vercel/next.js

バックグラウンド

Prismic.ioをCMSとして使用しており、このデータをgetInitialProps()で取得しています。 コンテンツはHTMLとして事前にフォーマットされているため、 dangerouslySetInnerHTMLます。

予想される行動

render()の出力は、サーバーとクライアントで実行した場合と同じです。

実際の動作

サーバーでのrender()の出力が間違っており、クライアントと一致しません。

サーバーからのレンダリング:

image

クライアントからレンダリング

image

違いは、DOMノードが適切にネストされていないため、サーバー上でコンテンツのスタイルが適切でないことです。

サーバーからのDOM:

image

クライアントからのDOM:

image

関連コード

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

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>
)

より詳しい情報

この展開と/_srcはここで公開されています: https

最も参考になるコメント

@flybayer報告してくれてありがとう。 私が間違っていることが、HTMLバリデータを通して、あなたシスを渡すと、私は、この電子与え可能性がrrorhttps:?HTTPS%3A%2F%2Fthefaithnet-ynikfpghwu.now.sh%2F = //validator.w3.org/nu/ドキュメント私がいるためだと思うがHTMLのネストでは、 pタグは無効です。 外側のp代わりにdivを使用してみてください。

全てのコメント3件

@flybayer報告してくれてありがとう。 私が間違っていることが、HTMLバリデータを通して、あなたシスを渡すと、私は、この電子与え可能性がrrorhttps:?HTTPS%3A%2F%2Fthefaithnet-ynikfpghwu.now.sh%2F = //validator.w3.org/nu/ドキュメント私がいるためだと思うがHTMLのネストでは、 pタグは無効です。 外側のp代わりにdivを使用してみてください。

@impronunciableうわー、それでした!

良いキャッチ、そしてあなたの助けを本当にありがとう!

うまくいったことをうれしく思います!

日、2016年11月6日には、11:57 AMブランドンバイエル[email protected]
書きました:

@impronunciable https://github.com/impronunciableうわー、それでした!

良いキャッチ、そしてあなたの助けを本当にありがとう!


あなたが言及されたのであなたはこれを受け取っています。

このメールに直接返信し、GitHubで表示してください
https://github.com/zeit/next.js/issues/213#issuecomment -258693902、またはミュート
スレッド
https://github.com/notifications/unsubscribe-auth/AAKHp5EvRuw2GOjOViKL0MjKr0Vrt65sks5q7gbtgaJpZM4KqaPT

このページは役に立ちましたか?
0 / 5 - 0 評価