Next.js: Сервер не отображает должным образом при использовании `опасноSetInnerHTML`

Созданный на 5 нояб. 2016  ·  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://thefaithnet-ynikfpghwu.now.sh/

Самый полезный комментарий

@flybayer благодарит за сообщение. Я могу ошибаться, но прохождение вашего ситха через валидатор HTML дает мне эту ошибку во вложении HTML теги p недопустимы. Можете ли вы попробовать использовать div вместо внешнего p ?

Все 3 Комментарий

@flybayer благодарит за сообщение. Я могу ошибаться, но прохождение вашего ситха через валидатор HTML дает мне эту ошибку во вложении HTML теги p недопустимы. Можете ли вы попробовать использовать div вместо внешнего p ?

@impronunciable Вау, вот и все!

Хороший улов, и большое спасибо за вашу помощь!

Рад, что это сработало!

В воскресенье, 6 ноября 2016 г., 11:57 Брэндон Байер [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 рейтинги