样式在此 SSR 应用程序的以下代码中出现可能 50 毫秒并消失。我很好奇是什么原因造成的。
// This component is a child of index.tsx in the /pages folder
<Button
color="primary"
variant="outlined"
size="large"
>Test Button</Button>
样式消失后,会留下一个纯 HTML 按钮。
我相信 Next.js 是造成这种情况的原因。我检查了 Next.js 文件并将 next/babel 加载器添加到 .babelrc。除此之外,我只看到了其他相关的变化。这是在 /pages/_document.js 中:
MyDocument.getInitialProps = async ctx => {
const sheets = new MuiServerStyleSheets();
const originalRenderPage = ctx.renderPage;
ctx.renderPage = () =>
originalRenderPage({
enhanceApp: App => props => sheets.collect(<App {...props} />),
});
const initialProps = await Document.getInitialProps(ctx);
return {
...initialProps,
// Styles fragment is rendered after the app and page rendering finish.
styles: [...React.Children.toArray(initialProps.styles), sheets.getStyleElement()],
};
};
试图解决的事情
- 重启服务器
没有更改发行。
- 强制刷新 Chrome 78 (CTRL + F5)
没变化。
理论
我认为存在服务器端问题。客户端和服务器应该在同一台机器上,localhost。这将解释正确的初始结果(客户端初始 UI)然后被服务器更新覆盖。
更新 1
忘了说我也更新/pages/_app.js
了。这是更新的部分:
class MyApp extends App {
componentDidMount() {
// Remove the server-side injected CSS.
const jssStyles = document.querySelector('#jss-server-side');
if (jssStyles && "parentElement" in jssStyles) {
(jssStyles.parentElement as HTMLElement).removeChild(jssStyles);
}
}