reactjs - Material UI Typescript - createStyles-problem
Jag har följande testkod (följande guiden i Material UI TypeScript-dokumentationen)
import * as React from 'react';
import { Theme } from '@material-ui/core/styles/createMuiTheme';
import { WithStyles } from '@material-ui/core';
import { createStyles } from '@material-ui/core/styles';
import Drawer from '@material-ui/core/Drawer';
const drawerWidth = 240;
const styles = (theme: Theme) => createStyles({
root: {
flexGrow: 1,
height: 430,
zIndex: 1,
overflow: 'hidden',
position: 'relative',
display: 'flex',
},
appBar: {
zIndex: theme.zIndex.drawer + 1,
},
drawerPaper: {
position: 'relative',
width: drawerWidth,
},
content: {
flexGrow: 1,
backgroundColor: theme.palette.background.default,
padding: theme.spacing.unit * 3,
minWidth: 0,
},
toolbar: theme.mixins.toolbar,
});
interface Props extends WithStyles<typeof styles> {}
interface State {}
export class Sidebar extends React.Component<Props, State> {
render() {
const { classes } = this.props;
return (
<Drawer
style={{position: 'relative', width: drawerWidth}}
variant='permanent'
classes={{
paper: classes.drawerPaper,
}}
>
<div className={classes.toolbar} />
</Drawer>
);
}
}
export default Sidebar;
Nu, om jag försöker använda denna komponent någon annanstans genom att göra:
import * as React from 'react';
import Grid from '@material-ui/core/Grid';
import Sidebar from './Sidebar';
export class Main extends React.Component {
public render() {
return (
<Grid container>
<Grid container item xs={12}>
<Sidebar />
</Grid>
</Grid>
);
}
}
export default Main;
Jag får felmeddelandet att classes saknas inom Main-komponenten och cannot read property drawerPaper of undefined inom SideBar-komponenten. Jag antog att extend WithStyles<typeof styles> skulle lösa problemet men det hjälper fortfarande inte när jag försöker importera och använda SideBar-komponenten. Jag har mycket lite erfarenhet av Material UI-teman så all vägledning skulle vara oerhört uppskattad.
Svar #1
Du har inte kopplat dina stilar till komponenten. Det finns ingen koppling i din kod mellan de stilar du skapade och resten av koden.
För att göra det behöver du använda HOC withStyles. Istället för export default Sidebar; gör bara export default withStyles(styles)(Sidebar);