#reactjs #styled-components #next.js #css-in-js
#reactjs #styled-компоненты #next.js #css-в-js
Вопрос:
Я недавно обновился до Next.js 8.0.3
от 6.1.1
и теперь я сталкиваюсь с очень интенсивной вспышкой не оформленного содержимого (FOUC) для содержимого моего заголовка, которое использует styled-jsx
. Он отлично загрузился перед обновлением Next.js .
Мигающий код заголовка представляет собой пользовательский модуль npm, который использует styled-jsx
(но не next
использует) и импортируется и помещается на страницу макета, которая отображается на каждой next
странице.
Это была реализация в _document.js
файле перед обновлением next
, и она работала:
import Document, { Head, Main, NextScript } from 'next/document'
import { ServerStyleSheet, injectGlobal } from 'styled-components'
import styledNormalize from 'styled-normalize'
import flush from 'styled-jsx/server'
injectGlobal`
${styledNormalize}
`
export default class MyDocument extends Document {
static getInitialProps({ renderPage }) {
const sheet = new ServerStyleSheet()
const page = renderPage(App => props =>
sheet.collectStyles(<App {...props} />)
)
const styleTags = sheet.getStyleElement()
const styles = flush()
return { ...page, styleTags, styles }
}
render() {
return (
<html>
<Head>
{this.props.styleTags}
</Head>
<body>
<Main />
<NextScript />
</body>
</html>
)
}
}
Основываясь на документах, я также пробовал это (где я жду начальных реквизитов):
import Document, { Head, Main, NextScript } from 'next/document'
import { ServerStyleSheet, injectGlobal } from 'styled-components'
import styledNormalize from 'styled-normalize'
import flush from 'styled-jsx/server'
injectGlobal`
${styledNormalize}
`
export default class MyDocument extends Document {
static async getInitialProps(ctx) {
const sheet = new ServerStyleSheet()
const page = ctx.renderPage(App => props =>
sheet.collectStyles(<App {...props} />)
)
const initialProps = await Document.getInitialProps(ctx)
const styleTags = sheet.getStyleElement()
const styles = flush()
return { ...initialProps, ...page, styles, styleTags }
}
render() {
return (
<html>
<Head>
{this.props.styleTags}
</Head>
<body>
<Main />
<NextScript />
</body>
</html>
)
}
}
Вспышка может быть результатом того, где я внедряю модуль, но не уверен.
Похоже, что код, поступающий из модуля, неправильно объединяется с остальными страницами и, таким образом, выдает страницу flash. Любые мысли или отзывы были бы оценены.
Ответ №1:
В итоге я исправил проблему путем рефакторинга пользовательского модуля npm, чтобы не использовать styled-jsx, а вместо этого использовать styled-components. На самом деле это не исправление, а скорее обходной путь