我已经把MUI从v4升级到了v5。然而,我现在很难理解主题如何与可用的不同主题解决方案一起工作。我真的不知道在哪里使用MUI主题/样式组件,以及何时使用情感组件。
在新的组件中,我使用sx属性来应用样式,但是我有相当多的组件仍然使用createStyles/useStyles函数。
我目前有以下设置:
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值?我试过这样做:
import { useTheme } from "@emotion/react";
const MyComponent = () => {
const theme = useTheme();
return (
<Box sx={{backgroundColor: theme.mycompany.primary}}>
...
</Box>是否有项目在不同文件中的多个组件中使用新的样式设置解决方案和typescript?
发布于 2021-10-19 11:21:10
在docs中,应该从@mui/material/styles导入useTheme。
如果您使用sx prop,您应该将自定义颜色代码放在调色板中,如下所示:
const theme = createTheme({
palette: {
mycompany: {
primary: "#003366"
}
},
});并引用组件中的颜色:
<Box sx={{ width: 30, height: 30, bgcolor: "mycompany.primary" }} />如果您使用的是styled,您可以添加一个回调,其中theme是第一个参数的属性:
const MyComponent = styled(Box)(({ theme }) => {
return {
backgroundColor: theme.palette.mycompany.primary,
width: 30,
height: 30
};
});实时演示
https://stackoverflow.com/questions/69629346
复制相似问题