在使用Material-UI和React时,你可以通过多种方式为特定组件设置样式,而不是所有组件。以下是几种常见的方法:
makeStyles
和withStyles
:这是Material-UI提供的两种主要的样式解决方案。styled-components
:这是一个流行的CSS-in-JS库,可以与Material-UI一起使用。makeStyles
makeStyles
是Material-UI提供的一个钩子,用于创建样式。
import React from 'react';
import { makeStyles } from '@material-ui/core/styles';
import Button from '@material-ui/core/Button';
const useStyles = makeStyles((theme) => ({
customButton: {
backgroundColor: 'blue',
color: 'white',
'&:hover': {
backgroundColor: 'darkblue',
},
},
}));
function CustomButton() {
const classes = useStyles();
return (
<Button className={classes.customButton}>
Custom Styled Button
</Button>
);
}
export default CustomButton;
withStyles
withStyles
是一个高阶组件,用于为组件添加样式。
import React from 'react';
import { withStyles } from '@material-ui/core/styles';
import Button from '@material-ui/core/Button';
const styles = {
customButton: {
backgroundColor: 'blue',
color: 'white',
'&:hover': {
backgroundColor: 'darkblue',
},
},
};
function CustomButton(props) {
const { classes } = props;
return (
<Button className={classes.customButton}>
Custom Styled Button
</Button>
);
}
export default withStyles(styles)(CustomButton);
styled-components
styled-components
是一个流行的CSS-in-JS库,可以与Material-UI一起使用。
styled-components
npm install styled-components
import React from 'react';
import styled from 'styled-components';
import Button from '@material-ui/core/Button';
const CustomButton = styled(Button)`
background-color: blue;
color: white;
&:hover {
background-color: darkblue;
}
`;
function App() {
return (
<CustomButton>
Custom Styled Button
</CustomButton>
);
}
export default App;
你可以直接在组件中使用内联样式。
import React from 'react';
import Button from '@material-ui/core/Button';
function CustomButton() {
const customStyle = {
backgroundColor: 'blue',
color: 'white',
'&:hover': {
backgroundColor: 'darkblue',
},
};
return (
<Button style={customStyle}>
Custom Styled Button
</Button>
);
}
export default CustomButton;
makeStyles
和withStyles
:推荐用于大多数情况,特别是当你需要访问主题变量时。styled-components
:适用于你已经在项目中使用styled-components
或更喜欢CSS-in-JS的语法。领取专属 10元无门槛券
手把手带您无忧上云