FOUC при использовании @ material-ui / core с NextJS / React - PullRequest
1 голос
/ 05 апреля 2019

Моя простая страница NextJS выглядит следующим образом (результаты можно посмотреть по адресу https://www.schandillia.com/):

/* eslint-disable no-unused-vars */

import React, { PureComponent, Fragment } from 'react';
import Head from 'next/head';
import compose from 'recompose/compose';
import Layout from '../components/Layout';
import { withStyles } from '@material-ui/core/styles';
import Button from '@material-ui/core/Button';

const styles = {
  root: {
    textAlign: 'center',
    paddingTop: 200,
  },
  p: {
    textTransform: 'uppercase',
    color: 'red',
  },
};

class Index extends PureComponent {
  render() {
    const { classes } = this.props;
    const title = 'Project Proost';
    const description = 'This is the description for the homepage';
    return (
      <Fragment>
        <Head>
          <title>{ title }</title>
          <meta name="description" content={description} key="description" />
        </Head>
        <Layout>
          <p className={classes.p}>amit</p>
          <Button variant="contained" color="secondary">
            Secondary
          </Button>
        </Layout>
      </Fragment>
    );
  }
}

export default withStyles(styles)(Index);

Я импортирую кучу компонентов из библиотеки @material-ui/core для стилизации своих предметов. У меня также есть локальное определение стиля, присвоенное константе style.

То, что здесь происходит, заключается в том, что мой стиль не отображается на сервере, поэтому файлы, обслуживаемые при загрузке, не имеют стиля. И тогда CSS обрабатывается клиентским кодом. В результате возникает вспышка нестандартного контента, который длится почти секунду, достаточно долго, чтобы его можно было заметить.

Есть ли способ это исправить? Вся кодовая база для справки на https://github.com/amitschandillia/proost/tree/master/web.

1 Ответ

1 голос
/ 12 апреля 2019

Я столкнулся с подобной проблемой, когда пытался создать производственную сборку моего приложения, которое использует material-ui.Мне удается решить, добавив JSS-провайдер , например:

import JssProvider from "react-jss/lib/JssProvider";

class App extends Component {
  render() {
    <JssProvider>
      *the rest of your material-ui components*
    </JssProvider>
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...