car*_*scc 4 javascript reactjs material-ui next.js
我在 Next.js 中使用 Material UI。我正在运行npm run dev。我的问题是,每当我按下浏览器上的重新加载按钮时,网站上的样式就会完全中断。这是正常行为吗?似乎 Material-UI 停止工作。
这是我的代码。
我有一个 index.js 和一个组件。
指数
import React, { Component } from 'react'
import CssBaseline from '@material-ui/core/CssBaseline';
import { MuiThemeProvider, createMuiTheme } from '@material-ui/core/styles';
import AppBar from '../components/NavBar/NavBar';
const theme = createMuiTheme({
  palette: {
      primary: {
        main: '#f28411',
      },
  },
});
class App extends Component {
  render() {
    return (
        <MuiThemeProvider theme={theme}>
        <React.Fragment>
            <CssBaseline />
            <AppBar />
        </React.Fragment>
        </MuiThemeProvider>
    )
  }
}
export default App
Run Code Online (Sandbox Code Playgroud)
成分
import React, { Component } from 'react'
import PropTypes from 'prop-types';
import { withStyles } from '@material-ui/core/styles';
import AppBar from '@material-ui/core/AppBar'
import Toolbar from '@material-ui/core/Toolbar'
import Typography from '@material-ui/core/Typography'
class NavBar extends Component {
    render() {
        const { classes } = this.props;
        return(
            <div>
            <AppBar position="static">
                <Toolbar>
                    <Typography variant="title" color="inherit">
Test                        
</Typography>
                </Toolbar>
            </AppBar>
            </div>
        );
    }
}
const styles = theme => ({
  title: {
    color: '#FFF',
  },
});
NavBar.propTypes = {
  classes: PropTypes.object.isRequired,
};
export default withStyles(styles)(NavBar);
Run Code Online (Sandbox Code Playgroud)
    我有同样的问题,但没有使用样式组件,所以上面的答案不适用,所以我想我会发布,以防这对其他人有帮助。为了解决这个问题,我只需要在 material-ui 示例中包含_document.js的pages/目录下添加文件:
import React from 'react'
import Document, { Html, Head, Main, NextScript } from 'next/document'
import { ServerStyleSheets } from '@material-ui/core/styles'
import theme from '../shared/utils/theme'
export default class MyDocument extends Document {
  render() {
    return (
      <Html lang='en'>
        <Head>
          <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>
    )
  }
}
MyDocument.getInitialProps = async (ctx) => {
  const sheets = new ServerStyleSheets()
  const originalRenderPage = ctx.renderPage
  ctx.renderPage = () =>
    originalRenderPage({
      enhanceApp: (App) => (props) => sheets.collect(<App {...props} />),
    })
  const initialProps = await Document.getInitialProps(ctx)
  return {
    ...initialProps,
    styles: [
      ...React.Children.toArray(initialProps.styles),
      sheets.getStyleElement(),
    ],
  }
}
Run Code Online (Sandbox Code Playgroud)
        您可能需要一个 babel插件来实现此目的。
在您的包中添加
npm install --save-dev babel-plugin-styled-components
Run Code Online (Sandbox Code Playgroud)
在你的中.babelrc,添加
{
  "plugins": [
    [ "styled-components", { "ssr": true, "displayName": true, "preprocess": false } ]
  ]
}
Run Code Online (Sandbox Code Playgroud)
让我知道这个是否奏效。
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           2581 次  |  
        
|   最近记录:  |