如何在React JS中检查Material ui主题的类型?(浅色或深色)

jep*_*ura 6 themes types reactjs material-ui

我想根据 Material ui 主题的类型是浅色还是深色来创建某些条件,我该怎么做?

Nea*_*arl 8

您需要重新创建主题并更新值theme.palette.type'light''dark')并将其传递给ThemeProvider应用更改。

const defaultTheme = createMuiTheme({
  palette: {
    type: "light"
  }
});

function App() {
  const [theme, setTheme] = React.useState(defaultTheme);
  const onClick = () => {
    const isDark = theme.palette.type === "dark";
    setTheme(
      createMuiTheme({
        palette: {
          type: isDark ? "light" : "dark"
        }
      })
    );
  };

  return (
    <ThemeProvider theme={theme}>
      <Card>
        <Typography variant="h3">{theme.palette.type}</Typography>
        <Button onClick={onClick}>Toggle theme</Button>
      </Card>
    </ThemeProvider>
  );
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用钩子或 HOC 检查子组件中的主题类型

const isDarkTheme = useTheme().palette.type === 'dark';
Run Code Online (Sandbox Code Playgroud)

HOC

const ThemedComponent = withTheme(Component)
Run Code Online (Sandbox Code Playgroud)
render() {
  const isDarkTheme = this.props.theme.palette.type === 'dark';
  return (...)
}
Run Code Online (Sandbox Code Playgroud)

现场演示

编辑 64557510/how-can-i-check-the-type-of-material-ui-theme-in-react-js-light-or-dark


par*_*hex 8

以下内容不再起作用:

const isDarkTheme = useTheme().palette.type === 'dark';
Run Code Online (Sandbox Code Playgroud)

试试这个:

 const isDarkTheme = useTheme().palette.mode === 'dark';
Run Code Online (Sandbox Code Playgroud)