【发布时间】:2020-04-17 10:54:50
【问题描述】:
我们需要组件,其中作为 props 传递的类应该比默认类具有更高的优先级。
当将classes作为prop传递时,组件优先 在他自己的文件中创建的类。
Text.jsx
// this will be a component in another folder, it will be used in the whole app so it
// should haveDYNAMIC styling
function Text(props) {
const useStyles = makeStyles(theme => ({
default: {
fontSize: 18,
color: "black"
}
}));
const classes = useStyles();
return (
<div className={classNames(classes.default, props.className)}>
{props.children}
</div>
);
}
App.jsx
function App() {
const useStyles = makeStyles(theme => ({
title: {
fontSize: 80,
color: "red"
},
notGoodPractice: {
fontSize: "80px !important"
}
}));
const classes = useStyles();
return (
<div className="App">
<Text className={classes.title}>Text in here is 18px</Text>
<Text className={classes.notGoodPractice}>
Text in here is 80px
</Text>
</div>
);
}
反应片段 => CodeSandBox
【问题讨论】:
-
CSS 没有“优先级”的概念。某些 CSS 选择器确实具有更高的优先级和选择性——但规则并不简单:tutorials.jenkov.com/css/precedence.html
-
这在正常优先级中很容易,我只需在 .css 文件的开头编写默认类,并在其下编写所有其他类:,真正的问题在于 CSS IN JS
-
这种方式很难做到,在 css 中它不掌握 classname 属性中的最后一个,当你定义 css 规则时,重要的是什么是最后一个。它与 spred 运算符或 Object.assign 不同。如果你想要的是将组件与样式解耦,然后注入样式以使其看起来像你想要的那样,我参考这篇文章:jobs.zalando.com/tech/blog/decoupled-styling-ui-components/…
-
您是否尝试过使用像
className={${classes.default} ${props.className}}这样的字符串文字。我现在无法测试这个。但据我所知,我遇到了同样的问题并像这样使用它。 -
@RenaldoBalaj 是的,我也这么认为。很好奇解决方法,希望你能找到答案。
标签: javascript reactjs react-native material-ui react-hooks