Reactjs 如何与Gatsby一起使用材质UI中的useStyles和makeStyles
我试图在我的盖茨比项目中使用MaterialUI,但是语法完全不同,我想了解这个场景中发生了什么 我试图将useStyles传递给我的标题组件,并尝试了大量不同的方法,阅读了盖茨比和react文档,但我遇到了麻烦 如果能解释一下两者之间的区别,我将不胜感激Reactjs 如何与Gatsby一起使用材质UI中的useStyles和makeStyles,reactjs,material-ui,gatsby,Reactjs,Material Ui,Gatsby,我试图在我的盖茨比项目中使用MaterialUI,但是语法完全不同,我想了解这个场景中发生了什么 我试图将useStyles传递给我的标题组件,并尝试了大量不同的方法,阅读了盖茨比和react文档,但我遇到了麻烦 如果能解释一下两者之间的区别,我将不胜感激 const {classes} = useStyles(); const {classes} = useStyles 以及组件中需要return()符号时 我还需要首先将useStyles传递到函数中吗 const useStyles =
const {classes} = useStyles();
const {classes} = useStyles
以及组件中需要return()符号时
我还需要首先将useStyles传递到函数中吗
const useStyles = makeStyles((theme) => ({
root: {
flexGrow: 1,
},
menuButton: {
marginRight: theme.spacing(2),
},
title: {
flexGrow: 1,
},
}));
const Header = ({ siteTitle }) => {
const {classes} = useStyles
return classes (
<div className={classes.root}>
<AppBar position="static">
<Toolbar>
<IconButton edge="start" className={classes.menuButton} color="inherit" aria-label="menu">
<MenuIcon />
</IconButton>
<Typography variant="h6" className={classes.title}>
{siteTitle}
</Typography>
<Button color="inherit">Login</Button>
</Toolbar>
</AppBar>
</div>
);
}
Header.propTypes = {
siteTitle: PropTypes.string,
}
Header.defaultProps = {
siteTitle: ``,
}
export default Header
const useStyles=makeStyles((主题)=>({
根目录:{
flexGrow:1,
},
菜单按钮:{
边缘光:主题。间距(2),
},
标题:{
flexGrow:1,
},
}));
常量头=({sitetTitle})=>{
常量{classes}=useStyles
返回类(
{siteTitle}
登录
);
}
Header.propTypes={
siteTitle:PropTypes.string,
}
Header.defaultProps={
网站名称:``,
}
导出默认标题
关于第一个问题-useStyles
是一个返回对象的函数。如果您希望能够使用该对象(并且您希望,这是使用该对象的方式),则需要调用该函数
如果您执行const{classes}=useStyles
-这没有任何意义,因为useStyles
引用(对函数的引用)中没有classes
实体
调用useStyles
函数并将其值放入classes
const中后,就可以使用classes.CLASS\u NAME
(它最终会根据makeStyles
定义,使用您编写的样式值创建生成的类名)
在您的示例中-classes.title
将创建一个值为flex-grow:1
的新类(假设名称为makeStyles-root-1
)
如果是css文件,它将如下所示:
.makeStyles-root-1 {
flex-grow: 1;
}
<div className="makeStyles-root-1">...</div>
const useStyles = makeStyles((theme) => ({
root: {
flexGrow: 1,
},
menuButton: {
marginRight: theme.spacing(2),
},
title: {
flexGrow: 1,
},
}));
const Header = ({ siteTitle }) => {
const classes = useStyles();
return (
<div className={classes.root}>
<AppBar position="static">
<Toolbar>
<IconButton edge="start" className={classes.menuButton} color="inherit" aria-label="menu">
<MenuIcon />
</IconButton>
<Typography variant="h6" className={classes.title}>
{siteTitle}
</Typography>
<Button color="inherit">Login</Button>
</Toolbar>
</AppBar>
</div>
);
}
Header.propTypes = {
siteTitle: PropTypes.string,
}
Header.defaultProps = {
siteTitle: ``,
}
export default Header
在react组件中,您可以这样使用它:
.makeStyles-root-1 {
flex-grow: 1;
}
<div className="makeStyles-root-1">...</div>
const useStyles = makeStyles((theme) => ({
root: {
flexGrow: 1,
},
menuButton: {
marginRight: theme.spacing(2),
},
title: {
flexGrow: 1,
},
}));
const Header = ({ siteTitle }) => {
const classes = useStyles();
return (
<div className={classes.root}>
<AppBar position="static">
<Toolbar>
<IconButton edge="start" className={classes.menuButton} color="inherit" aria-label="menu">
<MenuIcon />
</IconButton>
<Typography variant="h6" className={classes.title}>
{siteTitle}
</Typography>
<Button color="inherit">Login</Button>
</Toolbar>
</AppBar>
</div>
);
}
Header.propTypes = {
siteTitle: PropTypes.string,
}
Header.defaultProps = {
siteTitle: ``,
}
export default Header
。。。
相反,您可以在javascript代码中轻松引用该特定样式
关于您的代码-它应该如下所示:
.makeStyles-root-1 {
flex-grow: 1;
}
<div className="makeStyles-root-1">...</div>
const useStyles = makeStyles((theme) => ({
root: {
flexGrow: 1,
},
menuButton: {
marginRight: theme.spacing(2),
},
title: {
flexGrow: 1,
},
}));
const Header = ({ siteTitle }) => {
const classes = useStyles();
return (
<div className={classes.root}>
<AppBar position="static">
<Toolbar>
<IconButton edge="start" className={classes.menuButton} color="inherit" aria-label="menu">
<MenuIcon />
</IconButton>
<Typography variant="h6" className={classes.title}>
{siteTitle}
</Typography>
<Button color="inherit">Login</Button>
</Toolbar>
</AppBar>
</div>
);
}
Header.propTypes = {
siteTitle: PropTypes.string,
}
Header.defaultProps = {
siteTitle: ``,
}
export default Header
const useStyles=makeStyles((主题)=>({
根目录:{
flexGrow:1,
},
菜单按钮:{
边缘光:主题。间距(2),
},
标题:{
flexGrow:1,
},
}));
常量头=({sitetTitle})=>{
const classes=useStyles();
返回(
{siteTitle}
登录
);
}
Header.propTypes={
siteTitle:PropTypes.string,
}
Header.defaultProps={
网站名称:``,
}
导出默认标题