javascript - material-ui 客户端警告 : Prop `style` did not match

标签 javascript node.js reactjs redux material-ui

我正在使用服务器端渲染设置一个 react-redux 应用程序,对于 UI,我正在使用 react material-ui。我在应用程序的初始呈现时面临以下警告

WARNING

下面是工程文件

服务器文件 index.js

'use strict';

import express from 'express';
import webpack from 'webpack';
import path from 'path';
import config from '../webpack.config.js';
import chalk from 'chalk';
import bodyParser from 'body-parser';
import handleRender from '../client/src/utils/handleRender.js';

// Tell any CSS tooling (such as Material UI) to use all vendor prefixes if the
// user agent is not known.
global.navigator = global.navigator || {};
global.navigator.userAgent = global.navigator.userAgent || 'all';

const port = 3000;
const app = express();

webpack(config).run((err, results) => {
  // console.log(err);
  // console.log(results);
});
// Middlewares
app.use(express.static(path.resolve(__dirname, '../build'), { maxAge: 30 * 60 * 60 * 24 * 1000 }));
app.use(bodyParser.json());
app.use(handleRender);

// Trigger server
app.listen(port, function(err) {
  if (err) {
    console.log(chalk.red("Whoa!!! Server crashed..."), err);
  } else {
    console.log(chalk.green("YAY!!! Server is up and running..."));
  }
});

客户端 index.js

'use strict';

import React from 'react';
import { BrowserRouter } from 'react-router-dom';
import { hydrate } from 'react-dom';
import { Provider } from 'react-redux';
import { renderRoutes } from 'react-router-config';
import configureStore from './store';
import App from './containers/App.js';
import routes from './routes/index.js';

hydrate(
  <Provider store={configureStore()}>
    <BrowserRouter>
      {renderRoutes(routes)}
    </BrowserRouter>
  </Provider>,
  document.getElementById('root')
);

如果您需要任何其他信息,请告诉我。提前致谢!!!

最佳答案

material-ui 生成带有 vendor 前缀的内联样式。它只生成用户浏览器所需的 vendor 前缀。

global.navigator.userAgent = global.navigator.userAgent || 'all';

在服务器上,这变成了 userAgent = 'all' ……所以 material-ui 总是添加所有 vendor 前缀。然后在浏览器上它只添加它需要的 vendor 前缀,在现代浏览器中通常为 0。这就是差异的来源。

要尝试解决此问题,请将 userAgent 设置为服务器在服务器呈现应用程序之前在请求中收到的那个。参见 the material-ui docs on server rendering .您可以将传递给 MuiThemeProvider 的 muiTheme 对象上的 req.headers['user-agent'] 传递给 MuiThemeProvider,或者将其设置在全局 navigator对象。

关于javascript - material-ui 客户端警告 : Prop `style` did not match,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46495083/

相关文章:

javascript - SELECT2 -> 添加数据而不替换内容

javascript - 如何屏蔽网络套接字?

javascript - 样式组件导入结果未定义

Javascript "this"通过不同的范围

javascript - chrome 版本更新后的 Fullpage.js buggy 幻灯片动画

node.js - 语音 XML :lang ="en-US" xml:gender ="Male" name="Microsoft Server Speech Text is always in Female voice

javascript - oboe.js - 选择特定 Node 而不是所有匹配的模式?

reactjs - 在 Netlify 上调试失败的 Gatsby 构建(无法解析组件)

reactjs - 如何热重载样式组件?

javascript - 更改chartJs中yAxis的标签