gpt4 book ai didi

material-ui - 如何将 Nextjs + styled-components 与 material-ui 集成

转载 作者:行者123 更新时间:2023-12-04 01:40:57 26 4
gpt4 key购买 nike

1. 使用样式化组件构建 next.js 应用程序非常简单。你只需要使用他们的 _document.js启用 SSR 并防止页面加载时样式闪烁的代码段:https://github.com/zeit/next.js/blob/canary/examples/with-styled-components/pages/_document.js

2. 使用 material-ui 构建 next.js 应用程序几乎同样简单。你只需要从项目库开始:https://github.com/mui-org/material-ui/tree/master/examples/nextjs ,它在 _document.js 上有自己的实现:https://github.com/mui-org/material-ui/blob/master/examples/nextjs/pages/_document.js

3. 可悲的是,我无法弄清楚如何“合并”这两个实现并获得下一个应用程序,其中样式组件和 Material ui 组件可以共存,SSR 并且不会在页面加载时闪烁。

你能帮助我吗?
互联网上有没有比我能力强的人已经解决了这个问题但我不知道?

提前致谢。

最佳答案

试试这个
_document.js

import React from 'react';
import Document, { Head, Main, NextScript } from 'next/document';
import { ServerStyleSheet } from 'styled-components'
import { ServerStyleSheets } from '@material-ui/styles';
import theme from '../src/theme';

class MyDocument extends Document {
static async getInitialProps (ctx) {
const styledComponentsSheet = new ServerStyleSheet()
const materialSheets = new ServerStyleSheets()
const originalRenderPage = ctx.renderPage;

try {
ctx.renderPage = () => originalRenderPage({
enhanceApp: App => props => styledComponentsSheet.collectStyles(materialSheets.collect(<App {...props} />))
})
const initialProps = await Document.getInitialProps(ctx)
return {
...initialProps,
styles: (
<React.Fragment>
{initialProps.styles}
{materialSheets.getStyleElement()}
{styledComponentsSheet.getStyleElement()}
</React.Fragment>
)
}
} finally {
styledComponentsSheet.seal()
}
}

render() {
return (
<html lang="en" dir="ltr">
<Head>
<meta charSet="utf-8" />
{/* Use minimum-scale=1 to enable GPU rasterization */}
<meta
name="viewport"
content="minimum-scale=1, initial-scale=1, width=device-width, shrink-to-fit=no"
/>
{/* PWA primary color */}
<meta
name="theme-color"
content={theme.palette.primary.main}
/>
<link
rel="stylesheet"
href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700&display=swap"
/>
</Head>
<body>
<Main />
<NextScript />
</body>
</html>
);
}
}

export default MyDocument;
.babelrc
{
"presets": ["next/babel"],
"plugins": [["styled-components", { "ssr": true }]]
}
更新检查 https://github.com/nblthree/nextjs-with-material-ui-and-styled-components

关于material-ui - 如何将 Nextjs + styled-components 与 material-ui 集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55109497/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com