Как вытащить свойства из `createMuiTheme` внутри Material-UI` ExpansionPanel`? - PullRequest
0 голосов
/ 17 ноября 2018

Я использую Material-UI, и у меня есть компонент, который является ExpansionPanel .Я также создал тему по умолчанию с createMuiTheme, и я хочу, чтобы большая часть стилей была оттуда.Я хочу установить серый цвет панели расширения, как это было определено в createMuiTheme, однако это не удалось ни с помощью MUI className, ни с использованием style на панели расширения.Это код моей панели:

import React from 'react';
import PropTypes from 'prop-types';
import { withStyles } from '@material-ui/core/styles';
import ExpansionPanel from '@material-ui/core/ExpansionPanel';
import ExpansionPanelSummary from '@material-ui/core/ExpansionPanelSummary';
import ExpansionPanelDetails from '@material-ui/core/ExpansionPanelDetails';
import Typography from '@material-ui/core/Typography';
import ExpandMoreIcon from '@material-ui/icons/ExpandMore';

const styles = theme => ({
  root: {
    width: '100%',
  },
  heading: {
    fontSize: theme.typography.pxToRem(15),
    fontWeight: theme.typography.fontWeightRegular,
  },
  backgroundColor: theme.palette.secondary.grey
});

function SimpleExpansionPanel(props) {
  const { classes } = props;
  console.log(`theme.palette.secondary.grey=${classes.backgroundColor}`);
  return (
    <div className={classes.root}>
      <ExpansionPanel className={classes.backgroundColor}
                      style={{ backgroundColor: classes.backgroundColor }}>
        <ExpansionPanelSummary expandIcon={<ExpandMoreIcon />}>
          <Typography className={classes.heading}>More Info</Typography>
        </ExpansionPanelSummary>
        <ExpansionPanelDetails>
          <Typography>
            Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse malesuada lacus ex,
            sit amet blandit leo lobortis eget.
          </Typography>
        </ExpansionPanelDetails>
      </ExpansionPanel>
    </div>
  );
}

SimpleExpansionPanel.propTypes = {
  classes: PropTypes.object.isRequired,
};

export default withStyles(styles, { withTheme: true })(SimpleExpansionPanel);

В частности, строка console.log( theme.palette.secondary.grey = $ {classes.backgroundColor} ); печатает: SimpleExpansionPanel-backgroundColor-332.И это код моего createMuiTheme:

import { createMuiTheme } from '@material-ui/core/styles';
import blue from '@material-ui/core/colors/blue';

const MaterialBlueTheme = createMuiTheme({
  palette: {
    primary: blue,
    secondary: {
      main: '#f50057',
      grey: '#BDBDBD'
    }
  },
  typography: {
    useNextVariants: true,
  }
});

export default MaterialBlueTheme;

Наконец, я использую контекст MUI для предоставления темы:

import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import MuiThemeProvider from '@material-ui/core/styles/MuiThemeProvider';
import App from './App';
import MaterialBlueTheme from './components/layout/MaterialBlueTheme.js';
import * as serviceWorker from './serviceWorker';

ReactDOM.render(<MuiThemeProvider theme={MaterialBlueTheme}>
  <App />
</MuiThemeProvider>, document.getElementById('root'));
serviceWorker.unregister();

Как я могу действительно использовать цвет, который хочуот createMuiTheme?

1 Ответ

0 голосов
/ 18 ноября 2018

Каждый ключ в вашем объекте стилей является именем класса CSS.Каждое значение должно быть допустимым объектом свойств CSS.Поэтому:

const styles = theme => ({
  root: {
    width: '100%',
  },
  heading: {
    fontSize: theme.typography.pxToRem(15),
    fontWeight: theme.typography.fontWeightRegular,
  },
  // should use a better name for this class i.e. use a semantic name
  backgroundColor: {
    backgroundColor: theme.palette.secondary.grey,
  }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...