将类转换为函数React Error无效的钩子调用

Erykj97

我一直在将类组件转换为函数,但由于发生钩子错误,我无法使用导出默认值。我敢肯定这很简单,但找不到所需的答案。

错误截图

这是导致错误的代码:

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))

我希望以前有人遇到过类似的问题,并且能够给我一些反馈,谢谢:)

任意的

主要问题是如何使用export组件。请尝试以下操作:

export default connect(mapStateToProps)(Header)

您实际上并不需要makeStyles(useStyles)那里零件。


+1建议-与问题无关:

这个建议与问题本身无关,只是我喜欢makeStylesMaterial-UI组织代码存储库中的内容的一个小改进

通常,我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
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

无效的钩子调用 React Native

无效的钩子调用 - React Redux

React Native:无效的钩子调用

React 将函数转换为类并将变量从函数调用到类

React-bootstrap - 无效的钩子调用 - ButtonDropdown

无效的钩子调用 - react - material-ui

React.js - Redux 钩子无效的钩子调用

将React中的类基础组件转换为钩子

如何将 React 类组件字段转换为钩子

无法将钩子代码转换为 React 中的类

无效的钩子调用。钩子只能在函数体内调用。尝试使用 useContext

如何避免错误:无效的钩子调用。钩子只能在函数组件的主体内部调用?

无效的钩子调用。钩子只能在函数组件错误的主体内部调用

错误:无效的钩子调用钩子只能在函数组件的主体内部调用

错误:无效的钩子调用 - 在 react-router useHistory

添加 react-redux Provider 时钩子调用无效

用Jest模拟React HOC时出现“无效的钩子调用”

如何修复React(TypeScrtipt)错误“无效的钩子调用”?

获取错误:react js 中的钩子调用无效

React Redux-Toolkit:无效的钩子调用 - 只能在函数组件的主体内部调用钩子

React + Antd + Rollup组件库“错误:无效的钩子调用。只能在函数组件主体内部调用钩子”

无效的钩子调用。当我在 useEffect 中调用 useQuery 时,只能在函数组件的主体内部调用钩子

将 componentWillReceiveProps 函数转换为响应钩子

如何在reactjs中使用钩子将类组件转换为函数组件

将子类转换为超类并调用两个类都具有的函数

无效的钩子调用。钩子只能在函数组件的主体内部调用。即使在使用 hooks 指南之后

收到此错误“无效的钩子调用。只能在函数组件的主体内部调用钩子。” 在反应功能组件内?

无效的钩子调用。钩子只能在函数组件的主体内部调用。在反应原生签名画布中

使用钩子将 React 类组件转换为功能组件:事件侦听器的问题