#reactjs #material-ui
#reactjs #материал-пользовательский интерфейс
Вопрос:
Я хочу использовать компонент Link https://material-ui.com/api/link / и я хочу установить свои собственные цвета для основного и дополнительного, но я вижу, что для этого используется типография. Как его переопределить? Приведенный ниже код не работает
const typographyStyle = withStyles({
root: {
colorPrimary: {
color: ColorsTheme.primary.default
}
}
});
const StyledLink = withStyles(() => ({
}))(MaterialLink);
const Link = props => (
<StyledLink TypographyClasses={typographyStyle} {...props} />
);
export default Link;
Ответ №1:
Ниже приведен пример, показывающий два разных способа сделать это. Первый подход ( CustomLink
) нацелен на глобальные имена классов Typography. Второй подход ( CustomLink2
) используется makeStyles
для создания классов, которые передаются в TypographyClasses
prop of Link
.
import React from "react";
import MuiLink from "@material-ui/core/Link";
import { withStyles, makeStyles } from "@material-ui/core/styles";
const CustomLink = withStyles({
root: {
"amp;.MuiTypography-colorPrimary": {
color: "green"
},
"amp;.MuiTypography-colorSecondary": {
color: "purple"
}
}
})(MuiLink);
const useTypographyStyles = makeStyles({
colorPrimary: {
color: "orange"
},
colorSecondary: {
color: "brown"
}
});
const CustomLink2 = (props) => {
const typographyClasses = useTypographyStyles();
return <MuiLink TypographyClasses={typographyClasses} {...props} />;
};
export default function App() {
return (
<div className="App">
<MuiLink color="primary">Default Primary</MuiLink>
<br />
<MuiLink color="secondary">Default Secondary</MuiLink>
<br />
<CustomLink color="primary">Custom Primary</CustomLink>
<br />
<CustomLink color="secondary">Custom Secondary</CustomLink>
<br />
<CustomLink2 color="primary">Custom 2 Primary</CustomLink2>
<br />
<CustomLink2 color="secondary">Custom 2 Secondary</CustomLink2>
</div>
);
}
Соответствующая документация: https://cssinjs.org/jss-plugin-nested?v=v10.5.0#use—to-reference-selector-of-the-parent-rule
Комментарии:
1. Да, спасибо, это то, что я, наконец, сделал, но я надеялся, что существует другой способ 🙂
2. @user0810 Я добавил второй подход к своему ответу.
Ответ №2:
Одним из решений было бы переопределение правил css (не рекомендуется),
Лучшим способом сделать это было бы использовать палитру Mui (ссылка на документы)
Но будьте осторожны, если вы измените свою палитру, это отразится на всем вашем приложении, то есть цвет других компонентов mui изменится
Комментарии:
1. Вот почему я не хочу использовать всю палитру, только в этом компоненте
2. Вы можете просто проверить конкретный элемент и проверить
className
, а затем переопределить правила css, используя!important
3. Это то, что я начинаю делать, но я надеялся, что есть более приятный способ
4. То же самое здесь, как будто в палитре должно быть что-то вроде опции пользовательских цветов. Может быть, вы можете попробовать использовать
createStyles
метод, а затем использоватьuseStyles
. Теперь вы можете изменять цвет напрямую.