为什么 ThemeProvider(Material UI)在这里对我不起作用?

Rap*_*117 0 css reactjs material-ui

我已经使用了很多 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();
Run Code Online (Sandbox Code Playgroud)

我的应用程序组件:

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;
Run Code Online (Sandbox Code Playgroud)

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

  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 />
  }
}
Run Code Online (Sandbox Code Playgroud)

最后是标题:

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>
    )
}
Run Code Online (Sandbox Code Playgroud)

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

wow*_*ndy 12

MUI V5您需要导入ThemeProviderand createThemefrom@mui/material/styles而不是@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'));
Run Code Online (Sandbox Code Playgroud)

来源

  • 谢谢你。我从情感/反应导入ThemeProvider,并从mui/system导入CreateTheme,几乎花了半天时间试图弄清楚它 (2认同)

Ati*_*ngh 7

查看material-ui的文档,发现你从library导入了一些东西是错误的。就像文档状态一样 -

import { useTheme } from '@material-ui/core/styles';
import { createMuiTheme } from '@material-ui/core/styles';
Run Code Online (Sandbox Code Playgroud)

基本上可以是

import { useTheme, createMuiTheme } from '@material-ui/core/styles';
Run Code Online (Sandbox Code Playgroud)

ThemeProvider 也一样

import { ThemeProvider } from '@material-ui/core/styles';
Run Code Online (Sandbox Code Playgroud)