首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MUI v5主题与情感/mui

MUI v5主题与情感/mui
EN

Stack Overflow用户
提问于 2021-10-19 10:40:45
回答 1查看 1.3K关注 0票数 2

我已经把MUI从v4升级到了v5。然而,我现在很难理解主题如何与可用的不同主题解决方案一起工作。我真的不知道在哪里使用MUI主题/样式组件,以及何时使用情感组件。

在新的组件中,我使用sx属性来应用样式,但是我有相当多的组件仍然使用createStyles/useStyles函数。

我目前有以下设置:

代码语言:javascript
复制
import {
  ThemeProvider as MuiThemeProvider,
  Theme,
  StyledEngineProvider,
  createTheme,
} from "@mui/material/styles";
import { ThemeProvider } from "@emotion/react";

declare module "@mui/material/styles" {
  interface Theme {
    mycompany: {
      primary: string;
    };
  }
  // allow configuration using `createTheme`
  interface ThemeOptions {
    mycompany: {
      primary: string;
    };
  }
}

declare module "@mui/styles/defaultTheme" {
  // eslint-disable-next-line @typescript-eslint/no-empty-interface
  interface DefaultTheme extends Theme {}
}

const theme = createTheme({
  mycompany: {
    primary: "#003366",
  },
});

const App = () => {
  return (
    <StyledEngineProvider injectFirst>
      <MuiThemeProvider theme={theme}>
        <ThemeProvider theme={theme}>
          <Router>
            ...
          </Router>
        </ThemeProvider>
      </MuiThemeProvider>
    </StyledEngineProvider>

现在如何使用theme.mycompany.primary值?我试过这样做:

代码语言:javascript
复制
import { useTheme } from "@emotion/react";

const MyComponent = () => {
    const theme = useTheme();

    return (
      <Box sx={{backgroundColor: theme.mycompany.primary}}>
        ...
      </Box>

是否有项目在不同文件中的多个组件中使用新的样式设置解决方案和typescript?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-19 11:21:10

docs中,应该从@mui/material/styles导入useTheme

如果您使用sx prop,您应该将自定义颜色代码放在调色板中,如下所示:

代码语言:javascript
复制
const theme = createTheme({
  palette: {
    mycompany: {
      primary: "#003366"
    }
  },
});

并引用组件中的颜色:

代码语言:javascript
复制
<Box sx={{ width: 30, height: 30, bgcolor: "mycompany.primary" }} />

如果您使用的是styled,您可以添加一个回调,其中theme是第一个参数的属性:

代码语言:javascript
复制
const MyComponent = styled(Box)(({ theme }) => {
  return {
    backgroundColor: theme.palette.mycompany.primary,
    width: 30,
    height: 30
  };
});

实时演示

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69629346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档