使用ReactJS和MUI,我有一个项目,其中我改变了主题颜色。
const newTheme = getMuiTheme({
fontFamily: 'Roboto, sans-serif',
palette: {
primary1Color: cyan500,
primary2Color: cyan700,
primary3Color: grey400,
accent1Color: amberA400,
accent2Color: grey100,
accent3Color: grey500,
textColor: darkBlack,
alternateTextColor: white,
canvasColor: white,
borderColor: grey300,
disabledColor: fade(darkBlack, 0.3),
pickerHeaderColor: cyan500,
clockCircleColor: fade(darkBlack, 0.07),
shadowColor: fullBlack,
},
});
// App class
render() {
return(
<ThemeProvider theme={newTheme}>
<Project />
</ThemeProvider>
)
}
一切都按预期进行。某些组件(如按钮)可以根据主 prop 设置颜色。但是,我有一个组件,它使用了一个需要原色的图标。我可以导入颜色并直接设置:
import React from 'react';
import ActionLock from 'material-ui/svg-icons/action/lock';
import {cyan500} from 'material-ui/styles/colors';
export default class LockIcon extends React.Component {
render() {
return(
<ActionLock color={cyan500} />
)
}
}
有没有一些方法来引用主题的主要颜色,而不是在每个组件中单独设置颜色?类似于:
import React from 'react';
import ActionLock from 'material-ui/svg-icons/action/lock';
import {primary1Color} from 'somewhere';
export default class LockIcon extends React.Component {
render() {
return(
<ActionLock color={primary1Color} />
)
}
}
9条答案
按热度按时间a64a0gku1#
如果你使用的是React v16.8.0和Material-UI v3.5.0或更高版本,你可以使用
useTheme()
钩子:aoyhnmkz2#
是的,你有!使用多主题..
从material-ui文档
cyvaqqii3#
在material-ui v1.0.0(目前是测试版)中添加如何使用withTheme组件访问主题颜色。
还检查以下Example。
2wnc66cl4#
如果你使用的是system properties,你可以定义一个
Palette
对象到颜色值的字符串路径,如下所示:以上内容与以下内容相同:
使用回调的示例更详细,但却是类型安全的,在原型设计时,仅使用字符串的较短示例更快,也更好,但您可能希望将字符串存储在常量中,以防止任何打字错误,并帮助IDE更好地重构代码。
现场演示
9w11ddsr5#
有了react hooks,现在你不需要在withTheme中扭曲组件,只需要使用useTheme:
u7up0aaq6#
您可以使用useTheme()钩子并访问颜色,如下例所示。也有一些其他的颜色变体。
梅5:
z4bn682m7#
如果你使用的material-ui版本大于4,那么上面的解决方案可能不适合你。按照下面的代码
参考:https://material-ui.com/styles/advanced/
hm2xizp98#
MUI V5
对于MUI v5的用户,您可以直接在
sx
css样式中指定函数,例如:yhxst69z9#
使用MUI 5和
createTheme()
函数,您可以通过传递一个函数作为typography
值来引用ThemeOptions
中的调色板。这个函数接受调色板作为它的第一个参数。这使您可以轻松地Map各种hX和bodyX排版变体。