【问题标题】:Why is ThemeProvider (Material UI) not working for me here?为什么 ThemeProvider (Material UI) 在这里对我不起作用?
【发布时间】:2021-12-09 00:56:04
【问题描述】:

我经常使用 Material UI,所以这很令人费解。我查看了文档,检查了我的代码,但看不到问题所在。我希望嵌套组件中的 H2 标签使用 Arial。但是,它是使用 Times 渲染的。我不知道为什么。

这是我的 index.tsx:

import React from "react";
import ReactDOM from "react-dom";
import App from "./components/App";
import { Provider } from "react-redux";
import configureStore from "./redux/stores/main";
import * as serviceWorker from "./serviceWorker";
import { createMuiTheme } from "@material-ui/core";
import myTheme from "./styling/mainTheme";
import { ThemeProvider } from "@material-ui/styles";

const theme = createMuiTheme({
  typography: {
    fontFamily: ["Arial"].join(",")
  }
});

ReactDOM.render(
  <ThemeProvider theme={theme}>
    <Provider store={configureStore()}>
      <App />
    </Provider>
  </ThemeProvider>,
  document.getElementById("root")
);

serviceWorker.unregister();

我的应用组件:

import React from "react";
import { useSelector } from "react-redux";
import HeaderContainer from "../containers/layout/header/HeaderContainer";
import { ThemeProvider, useTheme } from "@material-ui/styles";
import theme from "../styling/mainTheme";
import { createMuiTheme } from "@material-ui/core";




const App: React.FC = () => {
    const theme = useTheme();
  return (
      <div className="App">
          <HeaderContainer />
      </div>
  );
};

export default App;

标头容器(将包含逻辑):

  import * as React from 'react';
import Header from '../../../components/layout/header/Header';

export interface HeaderContainerProps {
}

export default class HeaderContainer extends React.Component<HeaderContainerProps> {
  public render() {
    return <Header />
  }
}

最后是标题:

import * as React from "react";
import { styled } from "@material-ui/core/styles";
import AppBar from "@material-ui/core/AppBar";





export default function Header() {
    return (
        <AppBar>
            <h2>Hello</h2>
        </AppBar>
    )
}

我尝试将 ThemeProvider 放在不同的组件中,但我的 h2 仍然呈现为 Times。如果有人能发现这个问题,那就太好了。谢谢

【问题讨论】:

    标签: css reactjs material-ui


    【解决方案1】:

    检查 material-ui 的文档,发现您以错误的方式从库中导入了一些东西。就像文档状态一样 -

    import { useTheme } from '@material-ui/core/styles';
    import { createMuiTheme } from '@material-ui/core/styles';
    

    基本上可以

    import { useTheme, createMuiTheme } from '@material-ui/core/styles';
    

    ThemeProvider 也是如此

    import { ThemeProvider } from '@material-ui/core/styles';
    

    【讨论】:

    • 嗨,谢谢。我会说这是一个 ES6 语法问题,而不是 MUI 问题——但无论如何我认为问题可能是因为我使用 appbar 的方式。我再看看。感谢您的帮助
    • 我明白你的意思。使用解构导入,除了像这样导入import { useTheme, createMuiTheme } from '@material-ui/core/styles 之外,您正在导入import { ThemeProvider, useTheme } from "@material-ui/styles";。我还没用过material ui,但是我觉得import有点不对。
    【解决方案2】:

    MUI V5 中,您需要从@mui/material/styles 导入ThemeProvidercreateTheme 而不是@mui/styles

    import * as React from 'react';
    import ReactDOM from 'react-dom';
    import {red} from '@mui/material/colors';
    import { ThemeProvider, createTheme } from '@mui/material/styles';
    
    const theme = createTheme({
      palette: {
        primary: {
          main: red[500],
        },
      },
    });
    
    function App() {
      return <ThemeProvider theme={theme}>...</ThemeProvider>;
    }
    
    ReactDOM.render(<App />, document.querySelector('#app'));
    

    source

    【讨论】:

    • 这就是答案!谢谢。奇怪的是没有编译错误。
    • 谢谢。我正在从emotion/react 导入ThemeProvider,从mui/system 导入CreateTheme,几乎花了半天时间才弄明白
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-10
    • 2013-05-16
    • 2019-02-10
    • 2017-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多