javascript - 使用 Material-UI 从 UI 库中导出自定义主题
问题描述
我正在为使用 Material-UI 的工作创建一个自定义 UI 库。UI 库有一个自定义主题,我在其中添加了自定义公司颜色的调色板对象。主题存在于 UI 库中,对于存在于其中的元素,我可以在 makeStyles 中使用自定义颜色,但是当我尝试在主代码库中使用导出的主题时,自定义颜色会在 makeStyles 中引发错误。
我相信问题是我没有导出主题的自定义模块。我不确定如何将其正确导出和导入到主代码库中。目前,我只是导出主题文件并将其导入主代码库。
主要代码库:
import { theme } from 'customUILibrary';
...
<MuiThemeProvider theme={theme}>
...
</MuiThemeProvider>
自定义UI库:
索引.ts:
export { theme } from 'theme/theme';
主题/theme.ts
import {
createTheme,
responsiveFontSizes,
} from '@material-ui/core/styles';
import './extendPalette';
export const theme = responsiveFontSizes(createTheme({
palette: {
gradients: {
primary: 'linear-gradient(270deg, #35C7E1 -10.76%, #1A92BD 121.8%)',
secondary: 'linear-gradient(270deg, #194E94 0%, #317CA6 100%)',
},
},
}));
扩展调色板.ts
declare module '@material-ui/core/styles/createPalette' {
export interface PaletteOptions {
gradients: {
primary: string
secondary: string,
},
}
export interface Palette {
gradients: {
primary: string
secondary: string,
},
}
}
自定义主题属性在 UI 库中与 UI 元素一起工作得很好,但是当导入主代码库时,自定义属性不会被拾取,实际上会导致错误。
解决方案
正如这里所建议的,您可以执行以下操作:
declare module "@mui/material/styles" {
interface Palette {
custom: {
pink: string;
};
}
interface PaletteOptions {
custom: {
pink: string;
};
}
}
然后你可以安全地设置你在主题中的价值:
const theme = createTheme({
palette: {
custom: {
pink: "pink"
}
}
});
并在样式中使用它:
<Button sx={{ color: "custom.pink" }}>Content</Button>
请参阅我的代码框示例
推荐阅读
- nginx - 卷曲到托管在 kuberetes 上的应用程序返回 502 Bad Gateway
- swift - 从主视图控制器中提取 @IBOutlets 属性值
- angular - Angular 5 在 app.module.ts 中使用运行时环境变量
- ubuntu - VMware 盒子无法连接到互联网
- deep-learning - AlexNet 论文与他们报告的尺寸不匹配?
- python - 从具有许多页面的网站中抓取网页(Python)
- r - R:用索引替换字符串中的字符
- html - 滚动在 Safari 中有效,但在 chrome 中无效
- tensorflow-serving - Tensorflow Serving 同时出现多个请求崩溃
- javascript - 处理 redux-form 中的大量可选字段