我有一个nextjs静态站点。从屏幕截图中可以看到,JS加载速度很快,但是随后它等待样式化组件应用CSS。在页面加载后 应用CSS。
有什么想法可以等待样式化组件CSS插入吗?
更新:啊,我忘了这是一个 static 应用程序-这意味着nextjs将预先呈现页面的输出,然后加载JS 。因此,似乎应该应用等待JS加载的标准技术。但是,要注意的是静态HTML是由nextjs自动生成的,因此需要一种通过nextjs来实现的方法。
答案 0 :(得分:2)
为样式组件安装Babel插件=> npm i -D babel-plugin-styled-components
然后创建页面/_document.js
import Document from 'next/document'
import { ServerStyleSheet } from 'styled-components'
export default class MyDocument extends Document {
static async getInitialProps(ctx) {
const sheet = new ServerStyleSheet()
const originalRenderPage = ctx.renderPage
try {
ctx.renderPage = () =>
originalRenderPage({
enhanceApp: App => props => sheet.collectStyles(<App {...props} />),
})
const initialProps = await Document.getInitialProps(ctx)
return {
...initialProps,
styles: (
<>
{initialProps.styles}
{sheet.getStyleElement()}
</>
),
}
} finally {
sheet.seal()
}
}
如果要从样式组件中使用ThemeProvider,请将ThemeProvider添加到pages / _app.js。