Я создаю приложение с библиотекой Material-UI для ReactJS.Используя Theme Overrides API , я пытаюсь выяснить, как я могу глобально стилизовать компонент, но только когда это дочерний элемент другого определенного компонента.
Например, я 'я пытаюсь установить цвет фона / текста MenuItem
с в меню <Select>
, где каждый <MenuItem>
содержит <listItemText>
.Вот мой компонент:
import { MenuItem, Select, ListItemText } from '@material-ui/core';
import { MuiThemeProvider } from '@material-ui/core/styles';
import * as React from 'react';
import theme from './theme';
const MySelect = props => {
return (
<MuiThemeProvider theme={theme}>
<Select variant="standard" value="2" open>
<MenuItem value="1">
<ListItemText>One</ListItemText>
</MenuItem>
<MenuItem value="2">
<ListItemText>Two</ListItemText>
</MenuItem>
<MenuItem value="3">
<ListItemText>Three</ListItemText>
</MenuItem>
<MenuItem value="4">
<ListItemText>Four</ListItemText>
</MenuItem>
</Select>
</MuiThemeProvider>
);
};
export default MySelect;
К сожалению, применение цвета к <MenuItem>
напрямую не работает, потому что <ListItemText>
заменяет его на <Typography>
, который имеет свой собственный набор цветов.Это хорошо для неоткрытого, невыбранного состояния, но если я выберу стиль "selected" MenuItem
, чтобы он был темнее, мне нужно, чтобы текст был светлее.
![MUI select dropdown with darkened selected item and dark text](https://i.stack.imgur.com/bPHxx.png)
Вот мой файл темы:
import { createMuiTheme, createStyles } from '@material-ui/core';
const myTheme = createMuiTheme({
overrides: {
MuiMenuItem: createStyles({
root: {
'&&:hover': {
backgroundColor: 'pink',
color: 'white'
}
},
selected: {
'&&': {
backgroundColor: 'blue',
color: 'white'
},
'&&:hover': {
backgroundColor: 'darkblue',
color: 'white'
}
}
}),
// How do I enforce this ONLY inside of MuiMenuItem and only for
// the selected variant of that?
MuiTypography: {
subheading: {
color: 'white'
}
}
}
});
export default myTheme;
Итак, мой вопрос: есть ли способ сделать это, используя только переопределения тем?Или мне нужно условно передать этот стиль в компонент <ListItemText>
с помощью реквизита?Поскольку большинство стилей здесь хорошо вписываются в Theme Overrides, это кажется более приятным способом сделать это, но, возможно, я неправильно использую API.
Рабочую демонстрацию моего кода выше смотрите: https://codesandbox.io/s/3r9mkxq231
Любое понимание приветствуется!Спасибо!