Gatsby build / SSR заменяет компоненты, вызывая ошибки отображения - PullRequest
0 голосов
/ 07 февраля 2020

Обновление: приведенное ниже исправлено, но я сталкиваюсь с подобной проблемой:

В моем шаблоне галереи (для страницы примера см. Здесь все загружается нормально, если перейти к через сайт. При refre sh родительский div сетки (GalleryGrid в styled-components) стирается / не укладывается / заменяется пустым div. Это на самом деле происходит после refre sh, во время гидратации Гэтсби.

Я попытался заменить стилизованный компонент обычным div, стилизованным вручную, но безуспешно. Не знаю, что происходит!


У меня действительно странная ошибка!

Я создал сайт с использованием Gatsby, источников из Prismi c .io и стилевых компонентов для стиля. Я использую framer-motion для переходов страниц и добавил свой компонент макета в gatsby-browser, чтобы получать только содержимое страницы и добавил аналогичный код в gatsby-ssr для исправления некоторых начальных ошибок ssr.

В настоящее время происходит то, что всякий раз, когда страница, отличная от индекса, посещается, dir (попробуйте this ), некоторые компоненты не отображаются должным образом. В этом примере дата в верхней части страницы заменяется компонентом <Body> (стиль которого отличается от предполагаемого компонента <Date>), а фактическое содержимое было усечено и отображает только первый <p>.

Если вы перейдете в раздел «портфолио», а затем вернетесь к странице каталога, страница будет отображаться правильно - дата теперь является компонентом <Date>, и отображается весь основной текст.

Аналогичная ошибка возникает с узлами «эссе» - например, на этой странице изображение предназначено для компонента ImageContainer, но заменяется дополнительным EssayContainer при обновлении или доступе напрямую (вместо перехода на страницу с помощью навигации по сайту).

Я, честно говоря, понятия не имею, что здесь происходит или что может быть причиной этой ошибки - сделал ли я что-то не так или это ошибка в Gatsby's SSR или styleled-компоненты / плагин gatsby S C. Он работает, как и ожидалось, при запуске gatsby develop, поэтому должно быть что-то в сборке или SSR.

Мой браузер gatsby:

const transitionDelay = 500

export const wrapPageElement = ({ element, props }) => {
  return <Layout {...props}>{element}</Layout>
}

export const shouldUpdateScroll = ({
  routerProps: { location },
  getSavedScrollPosition,
}) => {
  if (location.action === "PUSH") {
    window.setTimeout(() => window.scrollTo(0, 0), transitionDelay)
  } else {
    const savedPosition = getSavedScrollPosition(location)
    window.setTimeout(
      () => window.scrollTo(...(savedPosition || [0, 0])),
      transitionDelay
    )
  }
  return false
}

И мой gatsby-ssr:

const transitionDelay = 500

export const wrapPageElement = ({ element, props }) => {
  return <Layout {...props}>{element}</Layout>
}

И мой репо здесь .

Любая помощь очень ценится!

Ответы [ 2 ]

0 голосов
/ 01 апреля 2020

Я не уверен, что может быть не так с используемыми вами стилизованными компонентами, они должны быть уникальными для каждой страницы / компонента. Одна вещь, которую я заметил в вашем проекте, это то, что вы создаете страницы с помощью gatsby-node, и это хорошо. Но при использовании Prismi c вы можете перейти на лучший поддерживаемый плагин, который позволит вам динамически генерировать страницы без необходимости настройки gatsby-node, а также позволяет легко настроить предварительный просмотр. В этой статье объясняется, как это сделать:

Как перенести проект из 'gatsby-source-prismi c' в 'gatsby-source-prismi c -graphql'

0 голосов
/ 07 февраля 2020

Это оказалось двумя проблемами!

Проблема с заменой некоторых компонентов при сборке была из-за используемой мной библиотеки медиазапросов - react-responsive - без поддержки SSR. Я перешел на @artsy/fresnel, и это решило кучу проблем.

Проблема с усеченным контентом, похоже, связана с тем, что стилевые компоненты не очень хорошо работают с SSR. У меня были стилизованные компоненты, которые устанавливали внутренний HTML напрямую - вложив еще один div внутри компонента и устанавливая html, сделали свое дело:

<Description>
          <div
            dangerouslySetInnerHTML={{
              __html: data.prismicGallery.data.description.html,
            }}
          />
        </Description>

Это решает почти все - у меня все еще есть проблема с гидратацией Гэтсби, заменяющей / удаляющей стилистику некоторых элементов, но я подозреваю, что это - другая проблема (добавленный к оригинальному вопросу).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...