Material-UI next - стилизация текста внутри ListItemText
Я пытаюсь применить стиль к тексту внутри ListItemText (Material-UI @next):
const text = {
color: 'red'
}
<ListItem button><ListItemText style={text} primary="MyText" /></ListItem>
Но отредактированный элемент <Typograhy>
внутри не имеет никакого стиля ( "MyText" не красен).
Посмотрев на сгенерированный код, кажется, что правила CSS по умолчанию для подписи в Typography > переопределяют мой CSS.
Спасибо за помощь
edit: В первой версии вопроса было недоразумение ( "className" вместо "style" prop на ListItemText, извините за это).
Ответы
Ответ 1
Я верю, что единственный способ достичь этого прямо сейчас - использовать "disableTypography" prop элемента ListItemText.
<ListItemText
disableTypography
primary={<Typography type="body2" style={{ color: '#FFFFFF' }}>MyTitle</Typography>}
/>
Это позволяет вам вставлять свой собственный текстовый элемент с любым стилем, который вы хотите на нем.
Ответ 2
Оказывается, есть еще лучший способ сделать это как таковой:
const styles = {
selected: {
color: 'green',
background: 'red',
},
}
const DashboardNagivationItems = props => (
<ListItemText
classes={{ text: props.classes.selected }}
primary="Scheduled Calls"
/>
)
export default withStyles(styles)(DashboardNagivationItems)
Вы можете прочитать больше о том, как это делается, здесь: https://material-ui-next.com/customization/overrides/#overriding-with-classes
Ответ 3
<ListItem >
<Avatar style={{ backgroundColor: "#ff6f00" }}>
<LabIcon />
</Avatar>
<ListItemText
primary={<Typography variant="h6" style={{ color: '#ff6f00' }}>Lab</Typography>}
secondary="Experiments" />
</ListItem>
![enter image description here]()
Ответ 4
это хорошо, вы можете реализовать без отключения типографии
<ListItemText
classes={{ primary: this.props.classes.whiteColor }}
primary="MyTitle"
/>
Ответ 5
Материал v1.0
Я бы добавил что-то к @SundaramRavi в отношении:
- то, как он использует элемент стиля, который невелик, как для Material v1.0 (прочитайте очень важное различие между v0.16 + и v1.0.
- способ структурирования файлов для лучшего разделения проблем.
Whatever.styles.js
const styles = theme => ({
white: {
color: theme.palette.common.white
}
});
exports.styles = styles;
Whatever.js
const React = require('react');
const PropTypes = require('prop-types');
const {styles} = require('./Whatever.styles');
class Whatever extends React.Component {
constructor(props) {
super(props);
}
render() {
const {classes} = this.props;
return (
<div>
<ListItemText
disableTypography
primary={
<Typography type="body2" style={{body2: classes.white}}>
MyTitle
</Typography>
}
/>
</div>
);
}
}
Whatever.propTypes = {
classes: PropTypes.object.isRequired,
theme: PropTypes.object.isRequired
};
exports.Whatever = withStyles(styles, {withTheme: true})(Whatever);
Ответ 6
Если вы используете материал-ui 3.x, вот как это делается:
import { withStyles } from '@material-ui/core/styles';
const styles = {
listItemText: {
color: 'white',
},
}
class YourComponent extends Component {
...
render() {
const { classes } = this.props; // this is magically provided by withStyles HOC.
return (
<ListItem button>
<ListItemIcon>
<DashboardIcon />
</ListItemIcon>
<ListItemText classes={{ primary: classes.listItemText }} primary="My Bookings" />
</ListItem>
);
...
}
export default withStyles(styles)(YourComponent);
установить все ваши текстовые стили, связанные с primary
свойством. Грустно, что это так глубоко спрятано в документации. https://material-ui.com/api/list-item/
Ответ 7
Согласно документации, компонент <ListItemText/>
предоставляет информацию о prop primaryTypographyProps
, которую мы можем использовать для выполнения того, что вы пытаетесь задать в своем вопросе:
const text = {
color: "red"
};
<ListItem button>
<ListItemText primaryTypographyProps={{ style: text }} primary="MyText" />
</ListItem>
Надеюсь, это поможет!