我一直在将类组件转换为函数,但由于发生钩子错误,我无法使用导出默认值。我敢肯定这很简单,但是找不到所需的答案。
这是导致错误的代码:
import React from 'react'
import {AppBar, Toolbar, Button, Typography, makeStyles} from '@material-ui/core'
import { connect } from 'react-redux'
import { Link } from 'react-router-dom'
import Menu from './Menu'
const useStyles = makeStyles((theme) => ({
header: {
backgroundColor: "#1d3834",
},
root: {
flexGrow: 1,
},
menuButton: {
marginRight: theme.spacing(2),
},
title: {
flexGrow: 1,
},
}))
function Header(props) {
const classes = useStyles()
const renderContent = () => {
switch (props.auth) {
case null:
return
case false:
return (
<Button color="inherit" href="/signin">Sign In</Button>
)
default:
return (
<Button color="inherit" href="/api/logout">Sign Out</Button>
)
}
}
return(
<div className={classes.root}>
<AppBar position="static" className={classes.header}>
<Toolbar>
<Menu/>
<Typography variant="h6" className={classes.title} >
<Link
to={props.auth ? '/items' : '/'}
className="left brand-logo"
>
</Link>
</Typography>
{renderContent()}
</Toolbar>
</AppBar>
</div>
);
}
function mapStateToProps({auth}) {
return{ auth }
}
export default connect(mapStateToProps)(makeStyles(useStyles) (Header))
我希望以前有人遇到过类似的问题,并且能够给我一些反馈,谢谢:)
答案 0 :(得分:0)
主要问题是如何export
您的组件。请尝试以下操作:
export default connect(mapStateToProps)(Header)
您确实不需要在那里的makeStyles(useStyles)
部分。
+1条建议-与问题无关:
该建议与问题本身无关,只是我希望使用 Material-UI 在我的代码存储库中组织makeStyles
内容的一个小改进。
通常,我创建一个styles.tsx
,在您的情况下如下所示,放置在您的组件文件旁边:
import { makeStyles } from "@material-ui/core"
const useStyles = makeStyles((theme) => ({
header: {
backgroundColor: "#1d3834",
},
root: {
flexGrow: 1,
},
menuButton: {
marginRight: theme.spacing(2),
},
title: {
flexGrow: 1,
},
}))
export default useStyles
然后在组件中import
如下:
import useStyles from "./styles"
其用法类似于组件中的用法:
function Header(props) {
const classes = useStyles()
// ... rest of your component
}